繁体   English   中英

如何将对象数组合并到对象数组包含 object 一个数组

[英]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.

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