gpt4 book ai didi

javascript - 递归javascript算法中的return语句,如何一直返回堆栈?

转载 作者:行者123 更新时间:2023-11-30 07:41:13 27 4
gpt4 key购买 nike

大家好,我正在尝试编写一个非常简单的 JSON 删除函数,并且我正在递归遍历 JSON。当我找到匹配的键值对时,我想删除 JSON 中的该对并返回 true,因为该对已被删除。我遇到的问题是返回并没有一直向上递归堆栈。我意识到我不能只这样做......

return true;

但我不想返回整个函数。我需要做这样的事情吗?

return this.true;

我还想在找到 KV 对匹配后中断递归,而不是继续搜索 JSON 的其余部分。目前它正在继续处理 JSON 的其余部分。找到匹配项后是否可以中断递归?

这里有一些代码,希望能让它更清楚。

deleteItems: function (toDelete) {
self = this;
var keys = toDelete.find(".key");
var vals = toDelete.find(".val");

for (var i = 0; i < keys.length; i++) {
$.each(this.json, function (key, val) {
console.log(keys[i].value + " : " + vals[i].value);
});
}

function remove(delKey, delVal, o) {
console.log(delKey + " : " + delVal);
for (var key in o) {
if (typeof o[key] === "object") {
console.log(key + " : [");
remove(delKey, delVal, o[key]);
} else {
if (delKey == key && delVal == o[key]) {
console.log("delete match: " + delKey + " : " + delVal + " , " + key + " : " + o[key]);
//delete this item.
return "true";
}
}
}
}

console.log(remove(keys[0].value, vals[0].value, this.json));
},

此外,如果其他人有更简单的方法使用 javascript 从 JSON 中删除 KV 对,我很想听听,必须有一种更简单的方法,然后简单地遍历整个事物并删除 KV 对。现在实际看这个,我认为它不适用于嵌套对象/列表。例如,如果 KV 对嵌套在我认为我无法删除 json[key] 的对象中,我将需要跟踪关于它的对象的键,因此需要删除 json.obj1。 obj2[键]。

预先感谢您在递归和从 JSON 中删除的切线方面提供的帮助。

最佳答案

你是对的,return 不是一直到栈顶,它是逐层进行的。

让我们看看你能做些什么来处理它!

你从这里回来:

  if (delKey == key && delVal == o[key]) {
console.log("delete match: " + delKey + " : " + delVal + " , " + key + " : " + o[key]);
//delete this item.
return true;
}

问题是,对于调用算法的其余方法而言,这并不重要,我们希望完成什么是让他们在找到匹配项时停止。

你有这一行:

remove(delKey, delVal, o[key]);

我们想知道那里发生了什么,这样的事情可能会奏效:

if(remove(delKey, delVal, o[key])){ // if I got a match, return true;
return true;
}

这样,成功就会在所有调用堆栈中冒泡。我们正在检查较小问题的结果是否解决了我们较大的问题(在这种情况下,意味着它返回 true)。如果是,我们的问题就解决了,我们自己返回 true。

还有其他方法可以解决这个问题,但这种方法很好,因为它解决了手头的递归问题。我们解决了导致解决更大问题的较小问题。

还有其他方法,例如,您可以抛出异常并在最高级别捕获它,从而无需更改代码(将 return true 更改为 throw true 并在最高级别捕获它。它们有效,但它们在概念上是错误的,因为它们的递归意义较小。

另一个提示,返回 true(这是表示真实性的语言值)而不是 "true",它只是一个字符串。

关于javascript - 递归javascript算法中的return语句,如何一直返回堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16864226/

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