将数组数组提取为哈希表,并在Javascript中使用数组的键变量

问题描述 投票:0回答:1

我有数组'arr',因为我有搜索条件name = abc.def,并且需要split('。'),该名称遍历所有节点,如下所示,首先搜索name = abc然后应该在所有匹配项中都更深入,在这里我应该继续搜索条件的第二部分-子name ='def'(实际上是初始搜索关键字“ abc.def”的第二部分)这是我应该通过的数据:

vars={1.1.1:{"no": "1.1.1","name": "Foo"}}

    let arr = [
            { 
              "no": "1",
              "name": "abc",
              "child" : [
                  { 
                      "no": "1.1",
                      "name": "def",
                      "child" : [
                          {
                              "no": "1.1.1",
                              "name": "Foo"
                          },
                          {
                              "no": "1.1.2",
                              "name": "jkl"
                          }
                          ] 
                  },
                  { 
                      "no": "1.2",
                      "name": "Foo",
                      "child" : [
                          {
                              "no": "1.2.1",
                              "name": "Foo"
                          },
                          {
                              "no": "1.2.2",
                              "name": "aaaaaaa"
                          }
                          ] 
                  }
              ]
              },
           { 
              "no": "2",
              "name": "abc2",
              "child" : [
                  { 
                      "no": "2.1",
                      "name": "Foo",
                      "child" : [
                          {
                              "no": "1.1.1",
                              "name": "ghi"
                          },
                          {
                              "no": "1.1.2",
                              "name": "jkl"
                          }
                          ] 
                  },
                  { 
                      "no": "2.2",
                      "name": "ghssssi",
                      "child" : [
                          {
                              "no": "2.2.1",
                              "name": "ghssssi"
                          },    
                          {
                              "no": "2.2.2",
                              "name": "asass"
                          }
                          ] 
                  }
              ]
          }
        ];

预期结果:遍历层次结构并提取哈希表中所有子匹配项的信息输出:

vars={};
vars[1.1.1]={ "no": "1.1.1","name": "Foo"}
vars[1.1.2]={ "no": "1.1.2","name": "jkl"}
...

例如:

javascript arrays hashtable
1个回答
0
投票

我们可以使用String.split()拆分path值以分别访问每个属性。

然后我们可以将最终child数组的内容作为对象返回。

let arr = [ { "no": "1", "name": "abc", "child" : [ { "no": "1.1", "name": "def", "child" : [ { "no": "1.1.1", "name": "Foo" }, { "no": "1.1.2", "name": "jkl" } ] }, { "no": "1.2", "name": "Foo", "child" : [ { "no": "1.2.1", "name": "Foo" }, { "no": "1.2.2", "name": "aaaaaaa" } ] } ] }, { "no": "2", "name": "abc2", "child" : [ { "no": "2.1", "name": "Foo", "child" : [ { "no": "1.1.1", "name": "ghi" }, { "no": "1.1.2", "name": "jkl" } ] }, { "no": "2.2", "name": "ghssssi", "child" : [ { "no": "2.2.1", "name": "ghssssi" }, { "no": "2.2.2", "name": "asass" } ] } ] } ];

function findItem(arr, path, vars) {
  var properties = path.split('.').filter(item => item.trim() !== '');
  var value = arr;

  for (let property of properties) {
    if (Array.isArray(value)) {
      value = value.find(item => item.name === property);
    } else if (value && value['child']) {
      value = value.child.find(item => item.name === property);
    }
  }
  
  if (value && value['child']) {
    value.child.forEach(item => {
      vars[item.no] = item;
    });
  }

  return vars;
}

let vars = {};
vars = findItem(arr, "abc.def", vars);

console.log(vars);
© www.soinside.com 2019 - 2024. All rights reserved.