我正在尝试创建一些带有字符串数组的东西,然后构建嵌套对象链,这些对象基本上存储了输入数组中的字符串。最初,这些链的深度为2,但我需要能够生成更高深度的链。
基本上,我需要采用这样的数组:
["test1", "test2", "test3", "test4"]
并将其转换为:
{
"test1":
{
"test2":
{
"test3":
{
"test4": {}
}
}
}
}
答案 0 :(得分:4)
这看起来像是Array#reduce
的工作:
function objectFromPath (path) {
var result = {}
path.reduce(function (o, k) {
return (o[k] = {})
}, result)
return result
}
var path = ["test1", "test2", "test3", "test4"]
console.log(objectFromPath(path))

.as-console-wrapper { min-height: 100%; }

答案 1 :(得分:0)
我想解决一个类似的问题,但我想在结果对象中的路径末尾设置一个值,并且我想提供一个初始对象。我从 gyre 的函数开始,并添加了一些额外的魔法来满足我的用例。
// Creates a nested object from an array representing the path of keys
//
// Takes 2 optional arguments:
// - a value to set at the end of the path
// - an initial object
//
// Ex: let house = objectFromPath(['kitchen', 'fridge'], 'empty', {civic: 123})
// => house = {civic: 123, kitchen: {fridge: 'empty'}}
const objectFromPath = (path, value = {}, obj = {}) =>
{
path.reduce((result, key, i, source) =>
{
if(i === (source.length - 1))
{
return (result[key] = value)
}
else
{
return (result[key] = {})
}
},
obj
)
return obj;
}
// Demo: house = {civic: 123, kitchen: {fridge: 'empty'}}
console.log(
objectFromPath(
['kitchen', 'fridge'],
'empty',
{civic: 123}
)
)