tree数据
let tree = [
{
id: 1,
name: "1",
pid: 0,
children: [
{
id: 2,
name: "2",
pid: 1,
children: [],
},
{
id: 3,
name: "3",
pid: 1,
children: [
{
id: 4,
name: "4",
pid: 3,
children: [],
},
],
},
],
},
];
tree形式转为扁平化数组
function treeToArray(tree) {
let res = [];
for (const item of tree) {
console.log("item:::::::::",item);
const { children, ...i } = item;
console.log("i:::::::::",i);
if (children && children.length) {
res = res.concat(treeToArray(children));
}
res.push(item);
}
return res;
}
查找某个节点所有父id
function findParents(treeArr,pid){
let parentArr = treeArr.filter(item => JSON.stringify(item).indexOf(pid)>-1);
return parentArr.map(par => par.id)
}
查找某个节点所有子id
function findChildrens(treeArr,id){
let obj = treeArr.filter(item => item.id==id);
let objStr = JSON.stringify(obj);
let regexpstr = /"id":\d+/g
let regexp = new RegExp(/"id":\d+/,"g");
let regList = objStr.match(regexp)
return regList.map(item => item.split(":")[1]);
}
扁平化数组转为tree形式
const arr = [
{ id: 1, pid: 0, title: "html" },
{ id: 2, pid: 1, title: "body" },
{ id: 3, pid: 2, title: "div" },
{ id: 4, pid: 2, title: "div" },
{ id: 5, pid: 3, title: "a" },
{ id: 6, pid: 3, title: "a" },
{ id: 7, pid: 5, title: "span" },
];
function arrayToTree(list) {
let res = [];
function getChildren(res, pid) {
for (const item of list) {
if (item.pid === pid) {
const newItem = { ...item, children: [] };
res.push(newItem);
getChildren(newItem.children, newItem.id);
}
}
}
getChildren(res, 0);
return res;
}