Javascript按数组创建Object

时间:2014-01-08 05:15:50

标签: javascript arrays object recursion

我尝试使用最后一个键的值创建一个对象。我只有一个带有键和值的数组但不知道如何在javascript中不使用引用来创建对象。

据我所知,没有办法在javascript中创建变量的引用。

这就是我所拥有的:

var value = 'test';
var keys = ['this', 'is', 'a', 'test'];

这就是我想要的:

myObject: {
   this : {
     is: {
       a : {
         test : 'test'
       }
     }
   }
}

我知道如何才能在JavaScript中实现这一目标吗?

4 个答案:

答案 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' } } }