首页 > 解决方案 > 如何将对象属性复制到其他对象,然后从数组中删除该对象?

问题描述

如果对象名称相同,我想复制source属性,然后从数组中删除该对象。我该如何实施?

const data = [
    {name: "name1", source: "source1"},
    {name: "name1", source: "source2"},
    {name: "name2", source: "source3"},
    {name: "name3", source: "source4"},
    {name: "name4", source: "source5"},
]

预期结果

[
  {name: "name1", source: "source1, source2"},
  {name: "name2", source: "source3"},
  {name: "name3", source: "source4"},
  {name: "name4", source: "source5"},
]

标签: javascript

解决方案


使用Array.prototype.reduce,您可以name按键值对值进行分组,也可以合并source同一键的name键值。

const data = [
  {name: "name1", source: "source1"},
  {name: "name1", source: "source2"},
  {name: "name2", source: "source3"},
  {name: "name3", source: "source4"},
  {name: "name4", source: "source5"},
];

const groupBy = data.reduce((acc, cur) => {
  acc[cur.name] ? acc[cur.name].source += `,${cur.source}` : acc[cur.name] = cur;
  return acc;
}, {});

const output = Object.values(groupBy);
console.log(output);


推荐阅读