Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,从一组数组递归地构建字典/嵌套对象_Javascript_Arrays_Json_Recursion_Reduce - Fatal编程技术网

在JavaScript中,从一组数组递归地构建字典/嵌套对象

在JavaScript中,从一组数组递归地构建字典/嵌套对象,javascript,arrays,json,recursion,reduce,Javascript,Arrays,Json,Recursion,Reduce,我觉得自己有点像个傻瓜,但我正在努力寻找解决办法 我有一组数组,需要使用它们来构建JSON ish对象 e、 g 变成 { a: { b: { c: {} d: {} } } e: { f: { g: {} } } } 等等 我想做的是: 实例化一个空对象、字典 取长度为n的任意数组 迭代数组,这样在数组位置i,如果字典在Dictionary[array[0]]…[array[i]]没有属性,我将该属性定义为a

我觉得自己有点像个傻瓜,但我正在努力寻找解决办法

我有一组数组,需要使用它们来构建JSON ish对象

e、 g

变成

{
  a: {
    b: {
      c: {}
      d: {}
    }
  }
  e: {
    f: {
      g: {}
    }
  }
}
等等

我想做的是:

  • 实例化一个空对象、字典
  • 取长度为n的任意数组
  • 迭代数组,这样在数组位置i,如果字典在Dictionary[array[0]]…[array[i]]没有属性,我将该属性定义为array[i]:{}
  • 我遇到的问题是查看指向所讨论的属性的任意路径。我不知道如何构建指向我正在寻找的属性名称的多级路径。i、 当i==0时

    var check = Array[i];
    typeof Dictionary[check] === 'undefined';
    
    我们将得到预期的行为。但它显然将整个数组构建为一组对象属性(而不是嵌套字典)

    我没有办法将下一步添加到check变量--

    进一步的排列是行不通的

    我确信我在这里遗漏了一些愚蠢的东西,但我被它卡住了,如果有人知道的话,我会很感激的

    而且,要注意的是,如果可能的话,我只需要使用jQuery或lodash来实现这一点,如果在普通JS中无法合理实现的话。

    简单:

    lst=[
    ['a'],
    ['a','b'],
    [a',b',c'],
    [a',b',d'],
    ['e'],
    ['e','f'],
    ['e','f','g']
    ];
    tree={};
    首席财务官(职能(项目){
    item.reduce(功能(节点,chr){
    返回节点[chr]| |(节点[chr]={});
    },树木);
    });
    
    document.write(“+JSON.stringify(tree,0,3))
    你有一个更简洁的答案,但我已经写过了

    var arrs=[
    ['a'],
    ['a','b'],
    [a',b',c'],
    [a',b',d'],
    ['e'],
    ['e','f'],
    ['e','f','g'],
    [e',f',g',h',i'],
    ['e','f','g','h','j']
    ];
    var字典={};
    应付账款(功能(项目){
    addArray(字典,项);
    });
    document.getElementById(“output”).innerText=JSON.stringify(dictionary,null,3);
    功能添加阵列(dic、arr){
    arr.forEach(功能(项目){
    dic=添加节点(dic,项目);
    });
    返回dic;
    }
    函数addNode(节点,项){
    返回节点[项目]| |(节点[项目]={});
    }

    格奥尔格的答案较短,但您的长篇大论很有帮助,谢谢您发布。谢谢。我确信这是我忽略的愚蠢的东西。注意,出于某种原因IE10没有为数组实现.reduce()。“不过,它能够与Lodash一起工作。@马特:这很奇怪,因为它在IE9中工作得很好。同意,根据各种定义网站,它看起来不应该有问题。”。
    var check = Array[i];
    typeof Dictionary[check] === 'undefined';
    
    ...
    check = check[Array[i+1];
    
    check = Dictionary[check][Array[i+1]]