Javascript forEach不提供与普通for循环相同的输出
您好,我正在运行一些测试,看看两者的输出是否正确。问题是,考虑到这些条件:Javascript forEach不提供与普通for循环相同的输出,javascript,foreach,callback,Javascript,Foreach,Callback,您好,我正在运行一些测试,看看两者的输出是否正确。问题是,考虑到这些条件: var callback=函数(num){ 返回数值%2==0 } log($$.any([1,3,4],回调)==true) console.log($$.any([1,11,111],callback)==false)在第二个版本中,内部回调函数中的返回true仅从该回调函数返回,而不会导致外部函数返回 .forEach循环将运行到完成,然后.any函数本身始终返回false FWIW,.forEach并不真正适用
var callback=函数(num){
返回数值%2==0
}
log($$.any([1,3,4],回调)==true)
console.log($$.any([1,11,111],callback)==false)
在第二个版本中,内部回调函数中的返回true
仅从该回调函数返回,而不会导致外部函数返回
.forEach
循环将运行到完成,然后.any
函数本身始终返回false
FWIW,.forEach
并不真正适用于。任何
函数,因为一旦找到匹配项,就无法终止对元素的迭代,因此效率较低。例如,您可能有一个包含10000个元素的数组,但使用.forEach
它将继续循环,即使第一个元素满足您的谓词
也就是说,如果您确实必须使用.forEach
,那么解决方案是:
function all(array, callback) {
var result = false;
array.forEach(function(value) {
if (callback(value)) {
result = true;
}
});
return result;
}
通过进一步优化,至少可以避免在找到匹配项后调用用户提供的回调:
function all(array, callback) {
var result = false;
array.forEach(function(value) {
if (!result && callback(value)) {
result = true;
}
});
return result;
}
注意:JavaScript已经有了一个可以满足您要求的功能-使用调试器一步一步地遍历您的程序。无论是谁刚刚使用了“无法复制错误/打字错误”关闭原因-您错了。这是一个逻辑错误。好吧,那么用forEach无法得到相同的结果吗?@Defoe是这样的,在外部范围中有一个最初设置为
false
的变量,如果谓词匹配,则在回调中设置为true
,然后返回该变量。但是,出于上述效率原因,您不应该这样做。好的@Alnitak我明白了,我会在其他情况下使用some函数。你能把你最后一个关于forEach解决方案的建议写在一个答案里吗?这样我就可以验证它了?