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)
您可以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)