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}
。这是正确的吗?如果是这样,我看不出它是如何简化那么多事情的。无论如何,迭代方法对这个问题来说要好得多。是的,没错。它消除了一点代码重复,而且更相关的是,使函数在空数组中工作。