我尝试使用最后一个键的值创建一个对象。我只有一个带有键和值的数组但不知道如何在javascript中不使用引用来创建对象。
据我所知,没有办法在javascript中创建变量的引用。
这就是我所拥有的:
var value = 'test';
var keys = ['this', 'is', 'a', 'test'];
这就是我想要的:
myObject: {
this : {
is: {
a : {
test : 'test'
}
}
}
}
我知道如何才能在JavaScript中实现这一目标吗?
答案 0 :(得分:8)
这个怎么样......
const value = 'test'
const keys = ['this', 'is', 'a', 'test']
const myObject = keys.reduceRight((p, c) => ({ [c]: p }), value)
console.info(myObject)
或者,如果您不是对象文字键快捷键和箭头函数的粉丝......
keys.reduceRight(function(p, c) {
var o = {};
o[c] = p;
return o;
}, value);
如果您需要IE< = 8支持,请参阅Array.prototype.reduceRight() - Polyfill。
答案 1 :(得分:4)
有了这个:
var curObj = myObject = {};
for(var i=0; i<keys.length-1; i++)
curObj = curObj[keys[i]] = {};
curObj[value] = keys[i];
输出:
{
this : {
is: {
a : {
Test : 'test'
}
}
}
}
与其他答案相反,这会输出 你要求的内容。
干杯
答案 2 :(得分:1)
var o={}, c=o;
var value = 'Test';
var keys = 'this is a test'.split(' ');
for (var i=0; i<keys.length-1; ++i) c = c[keys[i]] = {};
c[keys[i]] = value;
console.log(JSON.stringify(o));
// {"this":{"is":{"a":{"test":"Test"}}}}
答案 3 :(得分:0)
如果你想要这样的输出
{
this : {
is: {
a : 'test'
}
}
}
执行以下操作
var keys = ['this', 'is', 'a', 'test'];
var output = keys.reduceRight((p,c)=>({[c]:p}))
console.log(output)
输出将像
{ this: { is: { a: 'test' } } }