xSh*_*ase 16 javascript arrays object
这听起来像一个简单的任务,但我无法弄清楚:我有一个数组:
var array = ['opt1','sub1','subsub1','subsubsub1']
Run Code Online (Sandbox Code Playgroud)
从那我想生成以下对象:
{
opt1:{
sub1:{
subsub1:{
subsubsub1:{}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我有办法做到这一点,制作一个字符串并使用eval,但我希望避免这种情况,任何想法?
p.s*_*w.g 28
你可以使用reduce
:
var array = ['opt1','sub1','subsub1','subsubsub1'];
var object = {};
array.reduce(function(o, s) { return o[s] = {}; }, object);
console.log(object);
Run Code Online (Sandbox Code Playgroud)
但这仅在ECMAScript 5.1中引入,因此在某些旧版浏览器中不支持.如果您想要旧版浏览器支持的内容,您可以使用上面MDN文章中描述的polyfill技术,或者使用简单的for
-loop,如下所示:
var array = ['opt1','sub1','subsub1','subsubsub1'];
var object = {}, o = object;
for(var i = 0; i < array.length; i++) {
o = o[array[i]] = {};
}
console.log(object);
Run Code Online (Sandbox Code Playgroud)
您可以reduceRight
用来将数组转换为对象的“链”:
const array = ['a', 'b', 'c'];
const object = array.reduceRight((obj, next) => ({[next]: obj}), {});
// Example:
console.log(object); // {"a":{"b":{"c":{}}}}
Run Code Online (Sandbox Code Playgroud)