根据element ui tree组件选项id,获取其祖籍路径
例如 treeArr 数组:
id: 为 1-1-1,一级一级往上找,其祖籍路径为: 1-1 => 1
id: 为 1-2-2,一级一级往上找,其祖籍路径为: 1-2 => 1
id: 为 1-3-4-3,一级一级往上找 ,其祖籍路径为:1-3-4 => 1-3 => 1
const treeArr= [
{
id: "1",
children:[
{
id: "1-1",
children:[
{id: "1-1-1"},
{id: "1-1-2"},
{id: "1-1-3"},
]
},
{
id: "1-2",
children:[
{id: "1-2-1"},
{id: "1-2-2"},
{id: "1-2-3"},
]
},
{
id: "1-3",
children:[
{id: "1-3-1"},
{id: "1-3-2"},
{id: "1-3-3"},
{
id: "1-3-4",
children:[
{id: "1-3-4-1"},
{id: "1-3-4-2"},
{id: "1-3-4-3"},
]
}
]
}
]
}
];
function treeFilterIds(treeArr, treeIdArr, parentIds = [], ids = [], level = 0) {
level++;
for (let i = 0, len = treeArr.length; i < len; i++) {
if ("children" in treeArr[i] && treeArr[i].children.length > 0) {
parentIds.push(treeArr[i].id);
treeFilterIds(
treeArr[i].children, // tree 数据数组
treeIdArr, // 选中选项id数组
parentIds, // 递归存储父级id的数组
ids, // 最终返回的数组id
level // 层级 1为第一层
);
parentIds = parentIds.slice(0, level - 1); // 递归完后根据层级初始化parentIds,level -1 是因为
} else {
if (treeIdArr.includes(treeArr[i].id)) {
parentIds.push(treeArr[i].id);
ids.push(parentIds.join("/"));
parentIds = parentIds.slice(0, parentIds.length - 1);
}
}
}
return ids;
}
let ids = treeFilterIds(treeArr,["1-3-3-1","1-1-1"]);
console.log(ids); // => ["1/1-1/1-1-1","1/1-3/1-3-3-1/1-3-3-1"]