我有一系列键:
var keys = ['key1', 'key2', 'key3'];
如何以最简单的方式创建此类对象?
var object = { 'key1' : { 'key2' : {'key3' : 'value' }}}
答案 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);
参考: