Javascript 从数组嵌套JSON
我正在努力实现一些看似非常基本的目标,但在过去的几天里却让我发疯 我有一个简单的数组:Javascript 从数组嵌套JSON,javascript,Javascript,我正在努力实现一些看似非常基本的目标,但在过去的几天里却让我发疯 我有一个简单的数组:[“a”、“b”、“c”、“d”、“e”],我想把它变成一个嵌套的JSON,如下所示: {"a":{"b":{"c":{"d":{"e":""}}}}} 在循环过程中,我遇到了一些问题,比如“如何保存最后一个键,以便在不删除它的情况下进行设置”等等 有人有想法吗?你可能有问题,因为你的循环方向错误。尝试从内到外构建对象: array.reduceRight(function(v, key) { var
[“a”、“b”、“c”、“d”、“e”]
,我想把它变成一个嵌套的JSON,如下所示:
{"a":{"b":{"c":{"d":{"e":""}}}}}
在循环过程中,我遇到了一些问题,比如“如何保存最后一个键,以便在不删除它的情况下进行设置”等等
有人有想法吗?你可能有问题,因为你的循环方向错误。尝试从内到外构建对象:
array.reduceRight(function(v, key) {
var o = {};
o[key] = v;
return o;
}, "")
或者,使用循环:
var val = "";
for (var i=array.length; i--; )
var o = {};
o[array[i]] = val;
val = o;
}
return val;
这里有一种递归的方法:
function convertToNestedObject(arr) {
var result = {};
if (arr.length === 1) {
result[arr[0]] = '';
} else {
result[arr[0]] = convertToNestedObject(arr.slice(1, arr.length));
}
return result;
}
您可以将开始索引传递给函数,而不是使用slice
创建数组的副本:
function convertToNestedObject(arr, startIndex) {
var result = {};
if (arr.length - startIndex === 1) {
result[arr[startIndex]] = '';
} else {
result[arr[startIndex]] = convertToNestedObject(arr, startIndex + 1);
}
return result;
}
示例:将当前元素作为键,将空对象(
{}
)作为值。继续使用新插入的空对象
function toNested(arr){
var nested = {};
var temp = nested;
for(var i=0; i<arr.length; i++){
temp[arr[i]] = {};
temp = temp[arr[i]];
}
return nested;
}
功能音调设定(arr){
var嵌套={};
var-temp=嵌套;
对于(var i=0;i您为什么这样做?只是为了好玩吗?{“a”:{“b”:{“c”:{“d”:{“e”:“}}}}}}}如何帮助您?我必须从JSON构建一个jade块,我必须从数组构建它;)这正是我所需要的!从未听说过reduceRight方法,非常有用,非常感谢!:)你应该为arr.length==0
@Bergi:不确定,如果arr.length
是0
,那么访问arr[0]处的元素
将返回未定义的
。除非您的意思是完全更改基本大小写,否则我的意思是完全更改基本大小写,使其与递归大小写没有任何相似之处-简化整个函数。@Bergi:好的,我想您是说如果(arr.length==0){return“”;}则生成基本大小写{//recursive case}
。这是正确的吗?如果是这样,我看不出它是如何简化那么多事情的。无论如何,迭代方法对这个问题来说要好得多。是的,没错。它消除了一点代码重复,而且更相关的是,使函数在空数组中工作。