javascript - 使用循环创建动态嵌套对象

标签 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"

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

result = {
  "a": {
     "b": {
        "c": "cool"
     }
   }
}

如果是 4,:

result = {
  "a": {
     "b": {
        "c": {
           "d": "cool"
        }
     }
   }
}

所以...

编辑:

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

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

if (!result[keys[0]]) 
if (!result[keys[0]][keys[1]]) 
if (!result[keys[0]][keys[1]][keys[2]]) 

最佳答案

您可以使用reduceRight()为了这。它只是从键列表中最后一项的内部开始,并以“cool”开头:

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

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

console.log(result)

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

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)

关于javascript - 使用循环创建动态嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56974539/

相关文章:

java - Multimap Java 的 Multimap - 时间表分类

javascript - 在 typescript 中导入json

javascript - angularjs 根据给定数组重新排序 ng 重复结果

c# - DropDownList + OnSelectedIndexChanged + AutoPostBack=False

c++ - 场景输出在第二次循环时给出错误答案

objective-c - 将 Json 对象转换为字符串 - Objective C

javascript - 类似于 Javascript 中 move_uploaded_file() 的函数

c - C 中的嵌套 While 循环

java - 如何重复 Java 中的公共(public)类(class)?

C++使用字符串调用对象成员函数