我想动态创建一个嵌套对象。我可以通过硬编码来创建它。是否可以用循环来做到这一点?
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/