js 一个由有{id:‘’,name:‘’,children:【】}属性的对象组成的数组,如果其中对象的name值一致,则合并两个对象,新对象的id等于name
时间: 2024-02-13 18:04:26 浏览: 113
js代码-数组对象根据某个值相同合并分组
你可以使用 JavaScript 中的 reduce 方法来实现这个需求。具体做法是:
1. 遍历数组中的每个元素。
2. 判断当前元素的 name 是否已经在之前的元素中出现过。
3. 如果出现过,则将两个元素合并,新元素的 id 属性设置为 name,children 属性合并为一个数组。
4. 如果没有出现过,则将当前元素添加到结果数组中。
5. 返回最终的结果数组。
下面是一个示例代码:
```javascript
const data = [
{ id: '1', name: 'foo', children: [{ id: '2', name: 'bar', children: [] }] },
{ id: '3', name: 'foo', children: [{ id: '4', name: 'baz', children: [] }] },
{ id: '5', name: 'qux', children: [] },
];
const result = data.reduce((acc, cur) => {
const existing = acc.find((item) => item.name === cur.name);
if (existing) {
existing.id = cur.name;
existing.children = existing.children.concat(cur.children);
} else {
acc.push(cur);
}
return acc;
}, []);
console.log(result);
// Output: [
// { id: 'foo', name: 'foo', children: [
// { id: '2', name: 'bar', children: [] },
// { id: '4', name: 'baz', children: [] }
// ] },
// { id: '5', name: 'qux', children: [] }
// ]
```
在这个示例中,我们使用 reduce 方法将每个元素合并到结果数组中。我们通过 find 方法查找已经存在的元素,如果存在,则将当前元素合并到已存在的元素中,否则将当前元素添加到结果数组中。最终,我们得到了一个合并后的数组。
阅读全文