为什么这总是返回 false(嵌套的循环)
Why does this always return false (nested for loop)
很简单:
var shouldDoThis = function(query) {
documents.forEach(function(section) {
section.words.forEach(function(word) {
if (word.content == query.content) {
return true;
}
});
});
return false;
};
这是一个(糟糕的)改写的代码段 - 如果我传入一个应该解析为 true 的查询,"返回 true"会被击中,但随后直接跳转返回 false,因此这总是计算为 false。 我做错了什么?
因为你总是返回假。 return true
在其他范围内。你应该像这样编写代码:
var shouldDoThis = function(query) { // 1st level
var should;
documents.forEach(function(section) { // 2nd level
section.words.forEach(function(word) { //3rd level
if (word.content == query.content) {
should = true;
return; // you "quit" the 3rd level function. This returns to 2nd level
}
}); // end of 3rd level
}); // end of 2nd level
return should;
}; // end of 1st level
更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope
如果你在逻辑上分解这些,它可能更有意义。虽然不一定是 JavaScript 语法,但想象一下:
function shouldDoThis(query) {
documents.forEach(sectionDo);
return false;
}
function sectionDo(section) {
section.words.forEach(wordDo);
}
function wordDo(word) {
if (word.content == query.content) {
return true;
}
}
现在我知道这在实际情况下是行不通的,但是将其分开有助于分离在函数中具有多个功能的想法。如前所述,return true;
语句仅适用于wordDo
函数,不适用于shouldDoThis
函数。
一个好的解决方案可能是从wordDo
、sectionDo
返回一些东西,然后在shouldDoThis
中检查它。
相关文章:
- Knockout.js中带有if:子句的嵌套循环
- 有没有一种方法可以在所有嵌套循环之后放置一个标签,以便在一步中将它们全部打断
- JavaScript:在嵌套循环中为数组赋值
- Javascript嵌套循环匹配、组合、替换
- 在嵌套循环中处理 AJAX (Angularjs)
- knockout.js中的嵌套循环
- 在二维数组中搜索比嵌套循环更有效的方法
- 用于动态创建对象的嵌套循环
- 在javascript中嵌套循环
- JavaScript中的嵌入循环和嵌套循环之间有区别吗
- 嵌套循环中数组2d中的javascript变量丢失
- 嵌套循环javascript棋盘
- jQuery嵌套循环nextUntil选择器
- 如何使用嵌套循环使用 Javascript 打印到外部循环的输出中
- 如何在 Javascript 中创建一个模拟 100 行和 10 列网格的嵌套循环
- 如何避免嵌套循环
- 嵌套循环以添加数字
- 嵌套循环问题
- 嵌套循环中 Javascript 变量的作用域
- 从嵌套循环 Javascript 中的一个循环访问参数