[英]how to merge an array of objects to an array of objects contain object an array
有没有办法“合并”一组对象的值?
例如,我想采用这样的数组。 . .
input = [{name: 'x', data: 2},{name: 'y', data: 5},{name: 'x', data: 4},{name: 'y', data: 3}];
. . . 并将其转换为
output = [{name: 'x', data: [2,4]},{name: 'y', data: [5,3]}]
尝试这个:
let input = [{name: 'x', data: 2},{name: 'y', data: 5},{name: 'x', data: 4},{name: 'y', data: 3}]; let out = [...new Set(input.map(i => i.name))].map(i => { return {name: i, data: input.filter(j => j.name === i).reduce((a,b)=> [a.data].concat([b.data])) }; }); console.log(out);
这是我的解决方案:
const output = input.reduce((previous, next, currentIndex, array) => {
const index = previous.findIndex((item) => item.name === next.name);
if (index >= 0) {
previous[index].data.push(next.data);
} else {
previous.push({ ...next, data: [next.data] });
}
return previous;
}, []);
您可以通过生成一个新数组来完成此操作。 只需遍历输入数组并开始将每个唯一name
字段的data
值累积到新的合并数组中。 代码看起来像这样:
function merge(input){
let merged = [];
for (let i=0; i<input.length;i++) {
let found = merged.findIndex(e => e.name === input[i].name);
if (found === -1) {
merged.push({ name: input[i].name, data: [ input[i].data ] });
} else {
merged[found].data.push(input[i].data);
}
}
return merged;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.