我有一个这样的对象数组。
[
{KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"}
{KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"}
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"}
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"}
]
我需要这样的数据结构。因此,具有重复名称的key NAME
基本上将成为新数据结构的关键。 key PID
将是其在数组中的值。
[
{ VALUE2: [VALUE36, VALUE47] },
{ VALUE4: [VALUE49, VALUE43] },
]
答案 0 :(得分:0)
const a = [
{KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"},
{KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"},
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"},
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"},
];
var b = [];
a.forEach(function(element) {
if (b[element['NAME']] === undefined) {
b[element['NAME']] = [];
}
b[element['NAME']].push(element['PID']);
});
console.log(b);
输出:
[ VALUE2: [ 'VALUE36', 'VALUE47' ], VALUE4: [ 'VALUE49', 'VALUE43' ] ]
答案 1 :(得分:0)
此类聚合由Array.reduce()
处理。例如:
const arr = [
{KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"},
{KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"},
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"},
{KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"},
]
// Objects are basically associative arrays in JS, so...
// (For each item in arr, add or update an array at obj[item.NAME])
const obj = arr.reduce((obj, item) => {
const val = [ item.PID ]
obj[item.NAME] = Array.isArray(obj[item.NAME])
? obj[item.NAME].concat(val)
: val
return obj
}, {}) // start with obj = {}
/*
At this point, we have
obj = {
"VALUE2": [
"VALUE36",
"VALUE47"
],
"VALUE4": [
"VALUE49",
"VALUE43"
]
}
*/
// ...but since you specified separate objects, this finishes it off
const newArr = Object.entries(obj).map(([key, val]) => ({ [key]: val }))
console.log(newArr)