使用数组值创建嵌套对象

时间:2011-06-22 12:18:18

标签: javascript arrays object

我有一系列键:

var keys = ['key1', 'key2', 'key3'];

如何以最简单的方式创建此类对象?

var object = { 'key1' : { 'key2' : {'key3' : 'value' }}}

3 个答案:

答案 0 :(得分:5)

您可以利用JavaScript存储Object s:

的引用这一事实
var keys = ['key1', 'key2', 'key3']; // input data
var object = {};                     // output data
var current = object;                // we will use this to recursively insert
                                     // a new object

for(var i = 0; i < keys.length; i++) { // iterate through input data

    if(i === keys.length - 1) {    

        current[keys[i]] = 'value'; // if it's the last element, insert 'value'
                                    // instead of a new object

    } else {

        current[keys[i]] = {};      // otherwise insert a new element in the
                                    // current object with key of 'key1' etc
                                    // (from input data)

        current = current[keys[i]]; // set current object to this one, so that
                                    // next time it will insert an object into
                                    // this newly created one

    }

}

答案 1 :(得分:2)

这个怎么样......

var keys = ['key1', 'key2', 'key3']; //initial array
var obj = stackArray(keys);          //obj will contain the nested object


function stackArray(arr){
    var obj = new Object;

    obj[arr.shift()] = (arr.length==0) ? 'value' : stackArray(arr)

    return obj
}

我并不特别喜欢使用递归函数,但这似乎适合您的要求。

答案 2 :(得分:1)

在ES6中,您可以使用.reduceRight()和计算出的属性名称:

let keys = ['key1', 'key2', 'key3'];

let obj = keys.reduceRight((a, c) => ({[c]: a}), 'value');

console.log(obj);

参考: