const arr = [
[10000, 10001, 10067, 10068],
[10000, 10001, 10069],
[10000, 10003, 10071],
[10004, 10006, 10075]
]
定义方法
将[10000,10001,10069]
处理成链式结构[{name:10000,child:[{name:10001,child:[{name:10069,child:[]}]}]}]
function arr2List(arr) {
const list = [];
const head = {
name: arr[0],
child: [],
};
let prev = head;
list.push(prev);
for (let i = 1; i < arr.length; i++) {
const current = {
name: arr[i],
child: [],
};
prev.child.push(current);//prev push list里 prev直接变化
prev = current;// prev又变为 current ,list里prev不会变化
}
return list;
}
定义方法 可以将有共同的父节点的子节点合并到一起
function mergeList(tree, list) {
if (!tree) {
return;
}
const hasCommonParent = tree.some(treeItem => {
// 有共同的父节点
if (treeItem.name === list[0].name) {
mergeList(treeItem.child, list[0].child);
return true;
}
return false;
})
if (!tree.length || !hasCommonParent) {
tree.push(list[0]);
}
}
例如
let tree = [
{
name: 10000,
child: [
{
name: 10001,
child: [
{ name: 10069, child: [] }
]
}
]
}
]
let list2 = [
{
name: 10000,
child: [
{
name: 10001,
child: [
{ name: 10071, child: [] }
]
}
]
}
]
mergeList(tree,list2)
//最终 数组tree会变为这样的结构
[
{
name: 10000,
child: [
{
name: 10001,
child: [
{ name: 10069, child: [] },
{ name: 10071, child: [] }
]
}
]
}
]
最终方法
function arr2Tree(arr) {
const tree = [];
arr.forEach((item) => {
const list = arr2List(item);
mergeList(tree, list);
});
return tree;
}
调用
let params = arr2Tree(arr);``
console.log(params);