找父节点一般只有一条路径吧,为什么会出现多个呢?一个节点一般只有一个父节点,难道还要找父节点兄弟节点的子节点?
找指定节点所有子节点简单,将这个节点的value和遍历到的子节点的value全部压入数组,是否子节点遍历到的节点的parent是否在数组即可。
let list = [
{name:'全部分类', value: null, parent: null },
{ name: '视频', value: '682395', parent: null },
{ name: '音频', value: '971824', parent: null },
{ name: '流量', value: '891628', parent: null },
{ name: '编辑', value: '276312', parent: null },
{ name: '原创', value: '785312', parent: '682395' },
{ name: '改编', value: '981726', parent: '682395' },
{ name: '美食', value: '217241', parent: '785312' },
{ name: '科技', value: '783102', parent: '785312' },
{ name: '动画', value: '412842', parent: '981726' },
]
function getParentNodes(value,list) {//只有一条,没搞清楚找父节点会有多个分支
var node = list.find(i => i.value == value);
if (node) {//找到节点
var pNodes = [];//如果需要放入查找的节点这里改为var pNodes = [node];
while (node = list.find(i => i.value == node.parent)) {
pNodes.unshift(node);//将父节点前插
if (node.value === null) break;//找到顶级节点退出
}
return pNodes;
}
return null;//找不到需要查找的value返回null,注意判断getParentNodes函数返回值
}
function visitChildren(value, list) {
var index = list.findIndex(i => i.value == value);
if (index != -1) {//找到节点
var pids = [list[index].value];//父节点集合
for (var i = index + 1; i < list.length; i++) {
if (pids.includes(list[i].parent)) {
console.log(list[i]);//子节点
pids.push(list[i].value);//加入父id
}
}
}
}