const treeData1 = [ { title: '0-0', key: '0-0', children: [ { title: '0-0-0', key: '0-0-0', children: [ { title: '0-0-0-0', key: '0-0-0-0' }, { title: '0-0-0-1', key: '0-0-0-1' }, { title: '0-0-0-2', key: '0-0-0-2' }, ],
},
{
title: '0-0-1',
key: '0-0-1',
children: [
{ title: '0-0-1-0', key: '0-0-1-0' },
{ title: '0-0-1-1', key: '0-0-1-1' },
{ title: '0-0-1-2', key: '0-0-1-2' },
],
},
{
title: '0-0-2',
key: '0-0-2',
},
],
},
{
title: '0-1',
key: '0-1',
children: [
{ title: '0-1-0-0', key: '0-1-0-0' },
{ title: '0-1-0-1', key: '0-1-0-1' },
{ title: '0-1-0-2', key: '0-1-0-2' },
],
},
{
title: '0-2',
key: '0-2',
},
];
const treeData2 =[ { title: '0-0', key: '0-0', children: [ { title: '0-0-0', key: '0-0-0', children: [ { title: '0-0-0-0', key: '0-0-0-0' }, { title: '0-0-0-1', key: '0-0-0-1' }, { title: '0-0-0-2', key: '0-0-0-2' }, ],
},
{
title: '0-0-1',
key: '0-0-1',
children: [
{ title: '0-0-1-0', key: '0-0-1-0' },
{ title: '0-0-1-1', key: '0-0-1-1' },
{ title: '0-0-1-2', key: '0-0-1-2' },
],
},
{
title: '0-0-2',
key: '0-0-2',
},
],
},
{
title: '0-1',
key: '0-1',
children: [
{ title: '0-1-0-0', key: '0-1-0-0' },
{ title: '0-1-0-1', key: '0-1-0-1' },
{ title: '0-1-0-2', key: '0-1-0-2' },
],
},
{
title: '0-2',
key: '0-2',
},
];
问:如何快速比较两个树形结构数组,并取出交集?
答:new Map()+递归
方法如下:
function recursive (data, cmp, children) { const cmpMap = new Map(); const dataMap = new Map(); cmp.forEach(item => { cmpMap.set(item.path, item); }); data.forEach(item => { dataMap.set(item.path, item); }); data.forEach(item => { if (cmpMap.has(item.path)) { const item1 = Object.assign({}, item, cmpMap.get(item.path)); if(item.meta){ item1.meta = Object.assign({}, item.meta, cmpMap.get(item.path).meta) }; children.push(item1); const arry1 = dataMap.get(item1.path).children; const arry2 = cmpMap.get(item1.path).children; item1.children = []; if (arry1 && arry2) { recursive(arry1, arry2, item1.children); }; }; });};
const array = [];
recursive(treeData1, treeData2, array);