gpt4 book ai didi

javascript - 向后遍历不可计算的嵌套数组,节点遍历 - Javascript?

转载 作者:行者123 更新时间:2023-11-28 02:14:19 25 4
gpt4 key购买 nike

我有一个具有如下结构的对象

{
this.parent: undefined,
this.nodes: []
}

内部nodes可以是任意数量的具有相同结构的对象,但父级将设置为具有节点数组作为其属性的对象的父级。由于对象遵循此模式,顶级对象可能具有可能相当深的嵌套节点。

我想向顶级对象添加一个方法,该方法将反向搜索所有节点。下面是我试图实现的一个示例,只不过该函数正在向前搜索。

{
this.parent: undefined,
this.nodes: [],

this.searchForward: function() {

this.nodes.forEach(function(node) {

this.searchForward.call(this, node);
}, this);
}
}

searchForward上面的函数将尽可能深地搜索所有节点,然后移动到行中的下一个节点,等等。

我正在尝试编写一个函数,该函数将从最深的子级递归搜索回父级(本质上与上面相反)。

任何让我开始的想法都会很棒,谢谢。

最佳答案

首先,如果您只想遍历路径回到根,那很简单。 (不过,我很确定这不是您想要的。)

this.searchUp: function() {
var parnt = this.parent;
while (parnt) {
// do something, if you want
parnt = parnt.parnt;
}
}

我考虑的第一件事是在“做某事”部分调用searchForward。这可以工作,但让我觉得效率低下 - 每次你转到另一个父级时,你都会搜索已经搜索过的节点。尽管如此,它本身应该有效。 (只要您从 searchUp 调用 searchForward,就不会有无限循环的风险。)

我们可以让它变得更复杂一点,并通过添加一个标志来避免冗余。您需要修改 searchForward 并创建一个与其类似的函数:

this.initializeSearched: function() {
this.nodes.forEach(function(node) {
this.searched = false;
this.initializeSearched.call(this, node);
}, this);
}
this.searchForward: function() {
this.nodes.forEach(function(node) {
if (this.searched) { continue; }
this.searchForward.call(this, node);
}, this);
}

一旦有了这个,您应该能够将 searchForward 放入 searchUp 的“做某事”部分并完成。

关于javascript - 向后遍历不可计算的嵌套数组,节点遍历 - Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16642411/

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