简体   繁体   English

将状态数组值转换为键值对

[英]Convert state array values into key-value pairs

I have a state object array. 我有一个状态对象数组。 I want to convert the values inside the array into a key-value pair 我想将数组内的值转换为键值对

So, my state looks like this: 因此,我的状态如下所示:

0: {emp_code: "a001", company_code: "company_a", name: "abx", details: Array(3), details_dtypes: Array(3)}
1: {emp_code: "b002", company_code: "company_b", name: "xbz ", details: Array(2), details_dtypes: Array(2)}
//and so on adding other values to the array

I want to convert the emp-code and company_code into a key-value pair and display like a JSON object; 我想将emp-code和company_code转换为键值对,并像JSON对象一样显示; So the JSON output looks something like this: 因此,JSON输出如下所示:

{
emp_and_company:
{
  "company_a" : ["a001","a002"],
  "company_b" : ["b002","b003"]
}
}

So I just want to make the company_code as the key and values as the emp_code 所以我只想将company_code作为键并将值作为emp_code

You can do this in a concise manner via Array.reduce : 您可以通过Array.reduce以简洁的方式执行此操作:

 const data = [{ emp_code: "a001", company_code: "company_a", name: "abx", details: [], details_dtypes: [] }, { emp_code: "b002", company_code: "company_b", name: "xbz ", details: [], details_dtypes: [] }, { emp_code: "a002", company_code: "company_a", name: "xbz ", details: [], details_dtypes: [] }, { emp_code: "b003", company_code: "company_b", name: "xbz ", details: [], details_dtypes: [] } ] let result = data.reduce((r,c) => (r[c.company_code] = [...(r[c.company_code] || []), c.emp_code]) && r, {}) console.log(result) 

Here is a more readable version: 这是一个更具可读性的版本:

 const data = [{ emp_code: "a001", company_code: "company_a", name: "abx", details: [], details_dtypes: [] }, { emp_code: "b002", company_code: "company_b", name: "xbz ", details: [], details_dtypes: [] }, { emp_code: "a002", company_code: "company_a", name: "xbz ", details: [], details_dtypes: [] }, { emp_code: "b003", company_code: "company_b", name: "xbz ", details: [], details_dtypes: [] }] let result = data.reduce((acc, obj) => { acc[obj.company_code] = [...(acc[obj.company_code] || []), obj.emp_code] return acc }, {}) console.log(result) 

var output = {};
array.forEach((data) => {
   var prev = output[data['company_code']] || [];
   prev.push(data['emp_code']);
   output[data['company_code']] = prev;
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM