Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript forEach不提供与普通for循环相同的输出_Javascript_Foreach_Callback - Fatal编程技术网

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解决方案的建议写在一个答案里吗?这样我就可以验证它了?