如何从 forEach 返回一个值

Zop*_*opy 4 javascript function

我对 JavaScript 真的很陌生,遇到了一个我不明白的问题。

我想编写一个函数,它将一个数组作为参数,如果数组中的所有元素都相同,则返回 true。

现在我知道一个简单的 for 循环更有效,但我想用forEach()来做这个简单的函数。

function isUniform(array) {
    let uniChecker = array[0];
    array.forEach(function(element) {
        if (uniChecker !== element) {
            return false;
        }
    });
    return true;
}
Run Code Online (Sandbox Code Playgroud)

它总是返回真,即使它应该返回假。

Jam*_*mes 6

不幸的是,从forEach回调返回对外部作用域没有任何作用,它只是退出了回调作用域。虽然forEach 可以使用它并不是最有效的,因为没有真正的方法可以提前退出循环。

更好的选择是every / some,这些函数旨在测试数组中的项目并检测异常(由您提供的任何条件确定)并在第一个不匹配时退出,例如

const isUniform = arr => arr.every(x => arr[0] === x)
Run Code Online (Sandbox Code Playgroud)

操场

const isUniform = arr => arr.every(x => arr[0] === x)
Run Code Online (Sandbox Code Playgroud)


Shu*_*ubh 4

forEach() 会丢弃返回值并始终返回 undefined

所以无论你在代码中做什么,forEach 的返回值都不会返回

您可以创建一个标志,当满足您的条件时设置为 false(如果您想使用 ForEach,这是一个建议)

function isUniform(array) {
 let flag=true;
    let uniChecker = array[0];
    array.forEach(function(element) {
        if (uniChecker !== element) {
          flag=false;
        }
    });
    return flag;
}
Run Code Online (Sandbox Code Playgroud)

  • 事实上,您需要一个标志来使用“forEach”解决这个问题,这足以表明它不是适合该工作的工具。原生的“for”循环将是“forEach”的改进,因为您至少可以提前退出。 (3认同)