创建带有循环的动态嵌套对象

Can*_*gin 0 javascript loops object

我想动态创建一个嵌套对象。我可以创建它的硬编码。是否可以通过循环执行此操作?

result = {}
keys = ["a", "b", "c", "d"]

result[keys[0]] = {}
result[keys[0]][keys[1]] = {}
result[keys[0]][keys[1]][keys[2]] = {}
result[keys[0]][keys[1]][keys[2]][keys[3]] = "cool"
Run Code Online (Sandbox Code Playgroud)

我想传递一个整数,例如,如果它是“ 3”,则应该创建一个像这样的对象:

result = {
  "a": {
     "b": {
        "c": "cool"
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

如果为4,则:

result = {
  "a": {
     "b": {
        "c": {
           "d": "cool"
        }
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

等等...

编辑:

我也在检查结果对象,以创建此嵌套结构。如果还没有任何字段,我只创建对象。

使用此结构对数据进行分组。有机会动态检查这些内容吗?

if (!result[keys[0]]) 
if (!result[keys[0]][keys[1]]) 
if (!result[keys[0]][keys[1]][keys[2]]) 
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 5

您可以reduceRight()为此使用。它只是从内部在键列表的最后一项开始,然后以“ cool”开始进行解决:

let keys = ["a", "b", "c", "d"]
let limit = 3

let result = keys.reduceRight((obj, key) => ({[key]: obj}), "cool")

console.log(result)
Run Code Online (Sandbox Code Playgroud)

要限制对象停止的位置,您可以遍历键的一部分。例如:

let keys = ["a", "b", "c", "d"]
let start = 0
let stop = 3 // slices are don't inlcude the last item, so this will stop at index 2

let result = keys.slice(start, stop).reduceRight((obj, key) => ({
  [key]: obj
}), "cool")

console.log(result)
Run Code Online (Sandbox Code Playgroud)