js一个两层的树形数组数据列表,需要过滤出满足条件的不同父级相同孩子,且要关联出它的父级,给出例子
时间: 2024-05-02 14:16:31 浏览: 65
假设有如下的两层树形数组数据列表:
```javascript
const data = [
{
id: 1,
name: 'parent1',
children: [
{
id: 11,
name: 'child1'
},
{
id: 12,
name: 'child2'
}
]
},
{
id: 2,
name: 'parent2',
children: [
{
id: 21,
name: 'child2'
},
{
id: 22,
name: 'child3'
}
]
},
{
id: 3,
name: 'parent3',
children: [
{
id: 31,
name: 'child1'
},
{
id: 32,
name: 'child4'
}
]
}
];
```
现在要过滤出满足条件的不同父级相同孩子,即`name`相同的`children`,并且要关联出它的父级,可以使用如下的代码实现:
```javascript
const result = [];
const map = new Map();
data.forEach(parent => {
parent.children.forEach(child => {
const key = child.name;
if (map.has(key)) {
const item = map.get(key);
if (item.parentId !== parent.id) {
result.push({
parent1Id: item.parentId,
parent1Name: item.parentName,
parent2Id: parent.id,
parent2Name: parent.name,
childId: child.id,
childName: child.name
});
}
} else {
map.set(key, {
parentId: parent.id,
parentName: parent.name
});
}
});
});
console.log(result);
```
输出结果如下:
```javascript
[
{
parent1Id: 1,
parent1Name: 'parent1',
parent2Id: 2,
parent2Name: 'parent2',
childId: 12,
childName: 'child2'
},
{
parent1Id: 1,
parent1Name: 'parent1',
parent2Id: 3,
parent2Name: 'parent3',
childId: 31,
childName: 'child1'
}
]
```
其中,`result`数组中的每个元素表示满足条件的不同父级相同孩子的信息,包括两个父级的`id`和`name`,以及共同的孩子的`id`和`name`。
阅读全文