如何从递归函数中断和返回
How to break and return from recursive functions?
使用以下代码,该函数返回多次。我需要打破递归并只返回一次结果。
知道如何解决它吗?
http://jsfiddle.net/xhe6h8f0/
var data = {
item: [{
itemNested: [{
itemNested2: [{
id: "2"
}]
}]
}]
};
function findById (obj, id) {
var result;
for (var p in obj) {
if (obj.id) {
if(obj.id == id) {
result = obj;
break; // PROBLEM HERE dos not break
}
} else {
if (typeof obj[p] === 'object') {
findById(obj[p], id);
}
}
}
console.log(result);
return result;
}
var result = findById(data, "2");
alert(result);
如果找到匹配项,则需要返回该值。在父调用中,如果递归调用返回一个值,那么它也必须返回该值。你可以像这样修改你的代码
function findById(obj, id) {
var result;
for (var p in obj) {
/*
if `id` is not in `obj`, then `obj.id` will evaluate to
be `undefined`, which will not be equal to the `id`.
*/
if (obj.id === id) {
return obj;
} else {
if (typeof obj[p] === 'object') {
result = findById(obj[p], id);
if (result) {
return result;
}
}
}
}
return result;
}
现在
var result = findById(data, "2");
console.log(result);
将打印
{ id: '2' }
相关文章:
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- jQuery显示/隐藏返回未定义的、中断的插件
- 如何在返回值(Js)时不中断函数/循环
- 如何从递归函数中断和返回
- 在执行 ajax 调用返回错误时中断 jquery for 循环
- 通过 $.post() 将 HTML 元素传递给 PHP 会返回 JavaScript 对象或中断:我必须如何编码它
- 如何在AngularJS中中断/返回Angular异步调用
- 中断for循环并返回找到的结果