在JavaScript中,从一组数组递归地构建字典/嵌套对象
我觉得自己有点像个傻瓜,但我正在努力寻找解决办法 我有一组数组,需要使用它们来构建JSON ish对象 e、 g 变成在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
{
a: {
b: {
c: {}
d: {}
}
}
e: {
f: {
g: {}
}
}
}
等等
我想做的是:
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]]