function setArrayTree(arr, parentIds, id) {
//arr:数组 parentIds:用于确定父子关系的键 id:当前数据id
const rootItems = arr.filter((item) => !item[parentIds]); // 没有父级的数据(根节点)
const childrenOfItem = new Map();
for (const item of arr) {
const parentId = item[parentIds];
if (!childrenOfItem.has(parentId)) {
//map中不存在该数据
childrenOfItem.set(parentId, []); //存至map中并赋值为空
}
childrenOfItem.get(parentId).push(item); //parentId相同的存在一起
}
function addChildren(arr) {
for (const item of arr) {
// 在map中找到对应的id数据
const childItems = childrenOfItem.get(item[id]);
if (childItems) {
item.children = addChildren(childItems);
}
}
return arr;
}
return addChildren(rootItems);
}