简体   繁体   中英

Create nested object with array values

I have array of keys:

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

How can I create such object in a simplest way?

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

You could make use of the fact that JavaScript stores references for 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

    }

}

How about this...

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
}

I don't particularly like using recursive functions but this seems to lend itself to your requirement.

In ES6, you can use .reduceRight() and computed property names:

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

References:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM