返回语句在递归javascript算法,如何返回所有的方式堆栈
return statement in recursive javascript algoritum, how to return all the way up the stack?
嘿,伙计们,我想写一个非常简单的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));
},
另外,如果有人有更简单的方法从JSON中使用javascript删除KV对,我很乐意听到它,必须有一个更简单的方法,然后简单地遍历整个东西并删除KV对。现在实际上看着这个,我不认为它将工作为嵌套的对象/列表。例如,如果KV对嵌套在对象中,我认为我不能删除json[key],我需要跟踪关于它的对象的键,所以它需要删除json.obj1.obj2[key]。
提前感谢递归的帮助和关于从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"
,这只是一个字符串。
变化:
remove(delKey, delVal, o[key]);
:
if (remove(delKey, delVal, o[key]) == "true") {
return "true";
}
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- Rails File_field最大堆栈大小
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 使用MeteorJS堆栈,如何使用对象的id返回该对象的属性
- 如何在Internet Explorer中获取javascript堆栈跟踪.e.stack 返回 “Undefined”
- 对堆栈交换 API 的 http 请求返回不可读的 json
- 当脚本代码更改文本时,返回输入的javascript堆栈跟踪
- 返回语句在递归javascript算法,如何返回所有的方式堆栈
- NavigatorView's的页面堆栈是空的,返回到主页Onsen UI
- 平均堆栈路由不返回响应