我有这个节点列表:
10, 16 , 21, 26, fils_de_10, fils_de_16, fils_de_21
位于同一级别,根据项目结构,files_de_10
应该是10
的子级。
我想创建一个函数checkChild(node,id)
,例如,当我调用checkChild(_obj,10)
时,它将返回15,14,13,11,12
的{{1}}的子项和子项。
我一直试图想出一个递归函数,但它变得很乱。
如果有人已经有一些类似的功能,那将是件好事。
已编辑:这是节点的json数据:
10
答案 0 :(得分:0)
不确定你想要的是什么样的。
我所做的是检查函数内部当前项密钥是以fils_de_
开头的,如果是,则我们递归调用该函数。如果没有,我们只需将值添加到list
数组中。
看看并告诉我这是否适合您。
干杯!
var my_data = {
10: {
0: "0",
1: "blabla",
2: "t"
},
fils_de_10: {
13: {
0: "10",
1: "blabla 10_13",
2: "t"
},
14: {
0: "10",
1: "blabla 10_14",
2: "t"
},
15: {
0: "10",
1: "blabla 10_15",
2: "t"
},
fils_de_13: {
11: {
0: "10",
1: "blabla 10_11",
2: "t"
},
12: {
0: "10",
1: "blabla 10_12",
2: "t"
}
}
}
};
function checkChild(node,id) {
var list = [];
if(node['fils_de_'+id])
for (var item in node['fils_de_'+id])
if(item.match(/fils\_de\_(\d+)/))
list.push(...checkChild(node['fils_de_'+id], item.split('_')[2]));
else
list.push(item);
else
for (var item in node)
if(item.match(/fils\_de\_(\d+)/))
list.push(...checkChild(node[item], id));
return list;
}
console.log(checkChild(my_data, 10));
console.log(checkChild(my_data, 13));
答案 1 :(得分:0)
如果我做对了,你需要的是一个简单的Breadth-first tree traversing。查看众所周知的算法 - 它应该可以工作。
您应该在步骤中:
希望它有效。