根据以下数据来看,层级大致为 [国家->省份->城市],是一个三级的树结构。在应用中,我们可能只会使用到里面的value和parent字段关联父子关系。
所以就有了一种场景:根据节点value,我们需要拿到它上级所有父节点,此时我们使用普通的遍历是实现不了的,这里得用递归实现。
const data = [{
"value": 13,
"label": "加拿大",
"parent": 0,
"children": [{
"value": 14,
"label": "不列颠哥伦比亚",
"parent": 13,
"children": [{
"value": 15,
"label": "温哥华",
"parent": 14
}]
}]
}, {
"value": 8,
"label": "中国",
"parent": 0,
"children": [{
"value": 9,
"label": "上海",
"parent": 8,
"children": [{
"value": 10,
"label": "上海",
"parent": 9
}]
}]
}]
递归函数
递归学习路线:https://www.jianshu.com/p/e1c0faeca43c
const findChildrenNodes = function(data, id){
//定义变量保存当前结果路径
var temppath = [];
try {
data.forEach((item) => {
function getNodePath(node) {
//存储节点
temppath.push(node.value);
//找到符合条件的节点,通过throw终止掉递归
if (node.value == parseInt(id)) {
throw "OUT";
}
if (node.children && node.children.length > 0) {
for (var i = 0; i < node.children.length; i++) {
getNodePath(node.children[i]);
}
//当前节点的子节点遍历完依旧没找到,则删除路径中的该节点
temppath.pop();
} else {
//找到叶子节点时,删除路径当中的该叶子节点
temppath.pop();
}
}
getNodePath(item);
});
} catch (e) {
return temppath;
}
return temppath;
}