pum*_*umi 22 javascript arrays object
给定是这样的数组:
var level = ["a", "b", "x"];
Run Code Online (Sandbox Code Playgroud)
输出应该是:
{
"a": {
"b": {
"x": {
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我试过这个:
var level = ["a", "b", "x"];
var o = {};
for (var c = 0, len = level.length; c < len; c +=1 ) {
var part = level[c];
o[part] = {}; // how to remember the last part?
}
Run Code Online (Sandbox Code Playgroud)
我怎么能记住最后一部分并添加下一个级别?
Mih*_*nut 21
您可以通过将函数作为参数传递来使用reduceRight方法.arrow
var level = ["a", "b", "x"];
let result = level.reduceRight((obj, elem) => ({[elem]: obj}), {});
console.log(result);
Run Code Online (Sandbox Code Playgroud)
Cer*_*nce 12
最简单的调整是重新分配o
每次迭代:
var level = ["a", "b", "x"];
var o = {};
var initialO = o;
for (var c = 0, len = level.length; c < len; c +=1 ) {
var part = level[c];
o[part] = {};
o = o[part];
}
console.log(initialO);
Run Code Online (Sandbox Code Playgroud)
但这可能是一种更清晰的方法:
const level = ["a", "b", "x"];
const result = {};
level.reduce((accum, key) => {
accum[key] = {};
return accum[key];
}, result);
console.log(result);
Run Code Online (Sandbox Code Playgroud)
您可以使用检查是否存在级别,如果未设置则仅分配对象.
function addLevels(levels, object) {
levels.reduce((o, l) => o[l] = o[l] || {}, object);
}
var object = {};
addLevels(["a", "b", "x"], object);
addLevels(["a", "d", "z"], object);
console.log(object);
Run Code Online (Sandbox Code Playgroud)