从数组中嵌套JSON

时间:2014-09-25 13:47:49

标签: javascript

我正在努力实现一些看似非常基本但却让我在最后几天发疯的事情。

我有一个简单的数组:["a","b","c","d","e"]我想把它变成这样的嵌套JSON:

{"a":{"b":{"c":{"d":{"e":""}}}}}

循环使用它,我遇到了像#34这样的问题;如何在不删除它的情况下保存最后一个键来设置它"等等。

有没有人有想法?

3 个答案:

答案 0 :(得分:4)

你可能遇到了问题,因为你在错误的方向上循环。尝试从里到外构建对象:

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;

答案 1 :(得分:1)

这是一种方法,递归地:

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;
}

示例: http://jsfiddle.net/jwcxfaeb/1/

答案 2 :(得分:0)

将当前元素作为键和空对象({})作为值。继续使用新插入的空对象。

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;
}