【问题标题】:Return value for function instead of inner function in Array.forEach [duplicate]Array.forEach 中函数而不是内部函数的返回值 [重复]
【发布时间】:2017-02-13 13:39:52
【问题描述】:
我正在使用此代码来检查某些内容是否有效
function isValid(source, target) {
arr.forEach(function (el) {
if (el.value === 3) {
return false;
}
});
return true;
}
问题在于return false 行代码只会终止forEach 中的内部函数,而不是整个isValid 函数。
如何终止外部函数?
【问题讨论】:
标签:
javascript
arrays
foreach
return
【解决方案1】:
使用Array#every 来检查元素
function isValid(source, target) {
return arr.every(function (el) {
return el.value !== 3;
});
}
Array#some也一样
function isValid(source, target) {
return !arr.some(function (el) {
return el.value === 3;
});
}
【解决方案2】:
你不能。
见the documentation from MDN:
除了抛出异常之外,没有其他方法可以停止或中断 forEach() 循环。如果您需要这种行为,则 forEach() 方法是错误的工具,请改用普通循环。如果您正在测试谓词的数组元素并且需要布尔返回值,则可以使用 every() 或 some() 代替。如果可用,新方法 find() 或 findIndex() 也可用于在真谓词上提前终止。
【解决方案3】:
使用普通的for in 会很好,但使用forEach 你可以这样做:
function isValid(source, target) {
var r = true;
arr.forEach(function (el) {
if (el.value === 3) {
r = false;
return false; // terminate loop
}
});
return r;
}