获取javascript中数组的值

获取javascript中数组的值,javascript,arrays,Javascript,Arrays,我有以下节点列表: 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,它们是10的子级和子级 我一直试图提出一个递归函数,但它变得很混乱 如果有人已经有了类似的功能,那就太好了 已编辑:这是节点的json数据: var _str = '

我有以下节点列表:

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
,它们是
10
的子级和子级

我一直试图提出一个递归函数,但它变得很混乱

如果有人已经有了类似的功能,那就太好了

已编辑:这是节点的json数据:

var _str = '{"10":{"0":"0","1":"DISPONIBILITES","2":"t","style":"font-weight: bold;"},"16":{"0":"0","1":"TRESORERIE NETTE","2":"t","style":"font-weight: bold;"},"21":{"0":"0","1":"COMPTES","2":"t","style":"font-weight: bold;"},"26":{"0":"0","1":"LIGNE DE CREDIT BNP/HSBC","2":"f","style":"color:black;"},"fils_de_21":{"22":{"0":"21","1":"EXASOLAR SA","2":"f","style":"color:black;"},"23":{"0":"21","1":"EXASOLAR CORP","2":"f","style":"color:black;"},"24":{"0":"21","1":"EXASOLAR SARL","2":"f","style":"color:black;"},"25":{"0":"21","1":"EXASOLAR SL","2":"f","style":"color:black;"}},"fils_de_10":{"13":{"0":"10","1":"Disponibilits France","2":"t","style":"font-weight: bold;"},"14":{"0":"10","1":"Dispo exasolar SL","2":"f","style":"color:black;"},"15":{"0":"10","1":"Dispo exasolar corp","2":"f","style":"color:black;"},"fils_de_13":{"11":{"0":"13","1":"Dispo exasolar SA","2":"f","style":"color:black;"},"12":{"0":"13","1":"Dispo exasolar sarl","2":"f","style":"color:black;"}}},"fils_de_16":{"17":{"0":"16","1":"Trso nette exasolar SA","2":"f","style":"color:black;"},"18":{"0":"16","1":"Trso nette exasolar SL","2":"f","style":"color:black;"},"19":{"0":"16","1":"Trso nette exasolar corp.","2":"f","style":"color:black;"},"20":{"0":"16","1":"Trso nette exasolar sarl","2":"f","style":"color:black;"}}}';

不确定你想要的是不是这样的

我所做的是在函数内部检查当前项键是否是以
fils\u de_uu
开头的,如果是,则递归调用函数。如果没有,我们只需将值添加到
列表
数组中

看一看,让我知道这是否适合你

干杯

var my_data={
10: {
0: "0",
1:“布拉布拉”,
2:“t”
},
文件10:{
13: {
0: "10",
1:“布拉布拉10_13”,
2:“t”
},
14: {
0: "10",
1:“布拉布拉10_14”,
2:“t”
},
15: {
0: "10",
1:“布拉布拉10_15”,
2:“t”
},
第13号文件:{
11: {
0: "10",
1:“布拉布拉10_11”,
2:“t”
},
12: {
0: "10",
1:“布拉布拉10_12”,
2:“t”
}
}
}
};
函数checkChild(节点,id){
var列表=[];
if(节点['fils_de_'+id])
对于(节点['fils_de_'+id]中的var项)
如果(项匹配(/fils\\u de\\u(\d+/))
list.push(…checkChild(节点['fils_de_'+id],item.split('u')[2]);
其他的
列表。推送(项目);
其他的
for(节点中的变量项)
如果(项匹配(/fils\\u de\\u(\d+/))
list.push(…checkChild(节点[item],id));
退货清单;
}
log(checkChild(my_数据,10));

log(checkChild(my_数据,13))如果我做对了,您需要的是一个简单的。检查一下众所周知的算法-它应该可以工作

在以下步骤中,您应该:

  • 构建要检查的节点的名称(在您的示例中为fils_de_10)
  • 遍历树,直到找到此节点
  • 遍历此节点的子树并存储所有叶子作为结果

  • 希望它能起作用。

    你能为这个对象提供JSON,这样我们就可以很容易地复制它。@YeldarKurmangaliyev:我编辑了这个问题并添加了它。我们就快到了,有一件事我想要的是,当我们做
    console.log(checkChild(my_data,13)
    11,12
    也应该显示。我明白了……那是另外一回事。你需要在你的对象中寻找它有多深?fils_deu_13它总是在第二层?现在,我们只有两层。是的,fils_deu__13总是在第二层。它不会被复制。我已经编辑了我的答案,为函数添加了一个条件你在找的y。我希望它能帮助你!!干杯:)