在javascript中获取数组的值

时间:2017-07-12 05:13:46

标签: javascript arrays

我有这个节点列表:

enter image description here

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

2 个答案:

答案 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。查看众所周知的算法 - 它应该可以工作。

您应该在步骤中:

  1. 构建要检查的节点的名称(在您的示例中为“fils_de_10”)。
  2. 遍历树,直到找到此节点。
  3. 遍历此节点的子树并将所有叶子存储为结果。
  4. 希望它有效。