gpt4 book ai didi

Javascript - 递归循环,同时跟踪父子关系

转载 作者:行者123 更新时间:2023-11-29 20:54:21 25 4
gpt4 key购买 nike

使用 Javascript (Underscore 也是一个可行的解决方案),我如何循环遍历一个复杂的 JSON 对象(无数组),它可以深入多个对象。

我如何遍历 JSON 对象并跟踪我在父/子层次结构中的哪个级别?

例如,我有以下 JSON:

{
'parent1': {
'name': 'something',
'children': {
'name': 'something else'
}
},
'parent2': {
'name': 'something',
'children': {
'name': 'something else',
'anotherProp': {
'name': 'whoa..something else'
}
}
},
}

最终,我想遍历并添加一个名为“级别”的属性(例如 parent1.level)。顶级父级别是0,下一个子级别是1,等等。JSON 是动态的,因此没有固定结构,只是它是一个复杂的父/子 JSON对象。

我对递归函数没问题,但是确定每个 JSON 键/值对的相对级别让我感到困惑。

如果需要更多信息,请告诉我。

提前致谢!

最佳答案

您应该能够简单地递归一个带有对象和级别的函数:

var obj = {'parent1': {'name': 'something','children': {    'name': 'something else'}},'parent2': {'name': 'something','children': {'name': 'something else','anotherProp': { 'name': 'whoa..something else'}}},}

function recurse(obj, level=0){
// add level
obj.level = level
Object.values(obj).map(v =>{
if (typeof v === 'object') {
// call again on children with increased level
recurse(v, level+1)
}
})
}

recurse(obj)
console.log(obj)

如果您不希望这是一个递归函数,您可以使用经典的广度优先搜索,并在此过程中添加级别。像这样的东西:

var obj = {'parent1': {'name': 'something','children': {    'name': 'something else'}},'parent2': {'name': 'something','children': {'name': 'something else','anotherProp': { 'name': 'whoa..something else'}}},}

function addLevel(obj){
obj.level = 0
// will be FIFO queue
let queue = [obj]
while(queue.length){
let o = queue.shift();
Object.values(o).forEach(item => {
if (typeof item === 'object'){
// level will be one more than parent
item.level = o.level +1
queue.push(item)
}
});
}
}

addLevel(obj)
console.log(obj)

我不确定您的 level: 0 是否从对象的根或第一个父级开始,但这是一个简单的调整。两者都假设原始对象是一棵树(即没有循环引用)。如果存在循环引用,您将需要跟踪您看到了哪些对象。

关于Javascript - 递归循环,同时跟踪父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com