简体   繁体   中英

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; So the JSON output looks something like this:

{
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

You can do this in a concise manner via 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;
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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