javascript - Javascript列表循环/递归创建对象
问题描述
我正在尝试创建一个函数来使用 JavaScript 中的递归或循环来处理与深度相关的数字列表。
下面的“输入”需要处理成“输出”,它需要为任意列表工作。
需要注意的一点是,数字会增加 0 或 1,但可能会减少任意数量。
var input = [0, 1, 2, 3, 1, 2, 0]
var output =
[ { number: 0, children:
[ { number: 1, children:
[ { number: 2, children:
[ { number: 3, children: [] } ]
}
]
}
, { number: 1, children:
[ { number: 2, children: [] } ]
}
]
}
, { number: 0, children: [] }
]
我自己解决了它,虽然它需要一些改进。
var example = [0, 1, 2, 2, 3, 1, 2, 0]
var tokens = []
var last = 0
const createJSON = (input, output) => {
if (input[0] === last) {
output.push({ num: input[0], children: [] })
createJSON(input.splice(1), output)
}
else if (input[0] > last) {
last = input[0]
output.push(createJSON(input, output[output.length-1].children))
}
else if (input[0] < last) {
var steps = input[0]
var tmp = tokens
while (steps > 0) {
tmp = tmp[tmp.length-1].children
steps--
}
tmp.push({ num: input[0], children: [] })
createJSON(input.splice(1), tmp)
}
}
createJSON(example, tokens)
console.log(tokens)
解决方案
事实上,这是一个非常简单的问题要解决......
var input = [0, 1, 2, 3, 1, 2, 0]
, output = []
, parents = [output]
;
for(el of input)
{
let nv = { number:el, children:[] }
parents[el].push( nv )
parents[++el] = nv.children // save the @ddress of children:[] for adding items on
}
console.log( output )
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- asp.net-core - 我正在尝试向我的 API 写入一个 POST 请求,以便它可以作用于两个单独的对象(插入和更新)
- windows - 使用 curl 使用基本身份验证发送 GET 请求,其中密码以问号字符“?”开头
- windows - 为什么 WMI 在 \\root\SecurityCenter2 中显示相同 A/V 产品的重复条目?
- javascript - Axios - 显示验证返回的错误是 [object Object]
- sql - 防止影响特定行数的查询
- php - 将发布元键存储到数组中
- typescript - BotFramework-Webchat 中间件:设置 css 类名
- reactjs - 在按下第二个按钮之前,事件不会正确触发
- python - 如何将 2 个列表组合成一个字典,其中键可以有多个值?
- python - 在 HTML 中查找文本搜索元素的标记