在vue2中现有两个树形数组,treeData1和treeData2,已知treeData2只能通过在treeData1基础上添加子节点实现,现比较两个树形数组,将treeData2中所有比treeData1多出来的节点放入一个新的数组busMenuidArray中
时间: 2024-01-21 14:18:48 浏览: 66
可以通过以下代码实现:
```javascript
function compareTreeData(treeData1, treeData2) {
const busMenuidArray = [];
// 遍历treeData2
for (const item2 of treeData2) {
let isExist = false;
// 在treeData1中查找相同节点
for (const item1 of treeData1) {
if (item1.menuid === item2.menuid) {
// 如果找到相同节点,则递归比较子节点
if (item2.children && item2.children.length > 0) {
const diffChildren = compareTreeData(item1.children, item2.children);
if (diffChildren.length > 0) {
// 将不同的子节点添加到当前节点中
item1.children = item1.children.concat(diffChildren);
}
}
isExist = true;
break;
}
}
// 如果treeData1中不存在当前节点,则将其添加到busMenuidArray中
if (!isExist) {
busMenuidArray.push(item2);
}
}
return busMenuidArray;
}
```
使用方法:
```javascript
const treeData1 = [
{
menuid: 1,
name: '节点1',
children: [
{ menuid: 2, name: '节点2' },
{ menuid: 3, name: '节点3' }
]
},
{
menuid: 4,
name: '节点4',
children: [
{ menuid: 5, name: '节点5' }
]
}
];
const treeData2 = [
{
menuid: 1,
name: '节点1',
children: [
{ menuid: 2, name: '节点2' },
{ menuid: 3, name: '节点3' },
{ menuid: 6, name: '节点6' }
]
},
{
menuid: 4,
name: '节点4',
children: [
{ menuid: 5, name: '节点5' },
{ menuid: 7, name: '节点7' }
]
},
{
menuid: 8,
name: '节点8'
}
];
const busMenuidArray = compareTreeData(treeData1, treeData2);
console.log(busMenuidArray);
```
输出结果:
```javascript
[
{
menuid: 6,
name: '节点6'
},
{
menuid: 7,
name: '节点7'
},
{
menuid: 8,
name: '节点8'
}
]
```
其中,busMenuidArray中的节点即为treeData2中比treeData1多出来的节点。
阅读全文