js的tree数组对象扁平化思否_js 中的tree型数组如何去重与合并?
时间: 2024-05-16 19:17:45 浏览: 94
对于一个树形数组,可以使用递归的方式将其扁平化。具体实现可以参考以下代码:
```javascript
function flatten(arr, result = []) {
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
result.push(item);
if (Array.isArray(item.children)) {
flatten(item.children, result);
}
}
return result;
}
```
上述代码会将树形数组扁平化为一维数组。然后,我们可以使用数组的 `reduce` 方法对其进行合并和去重。具体实现可以参考以下代码:
```javascript
function merge(arr) {
const map = new Map();
return arr.reduce((result, item) => {
const key = item.id;
if (!map.has(key)) {
map.set(key, item);
result.push(item);
} else {
const existItem = map.get(key);
existItem.count += item.count;
}
return result;
}, []);
}
```
上述代码会将相同 `id` 的项进行合并,并将合并后的结果保存在一个新数组中返回。
最终,我们可以将以上两个函数组合起来使用,如下所示:
```javascript
const tree = [
{
id: 1,
count: 1,
children: [
{
id: 2,
count: 2,
children: [
{
id: 3,
count: 3,
children: [
{
id: 4,
count: 4,
},
],
},
],
},
],
},
{
id: 1,
count: 2,
children: [
{
id: 2,
count: 3,
children: [
{
id: 3,
count: 4,
children: [
{
id: 5,
count: 5,
},
],
},
],
},
],
},
];
const flat = flatten(tree);
const merged = merge(flat);
console.log(merged);
// Output:
// [
// { id: 1, count: 3 },
// { id: 2, count: 5 },
// { id: 3, count: 7 },
// { id: 4, count: 4 },
// { id: 5, count: 5 }
// ]
```
上述代码会将树形数组扁平化、合并和去重,得到最终的结果。
阅读全文