首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从forEach返回值

如何从forEach返回值
EN

Stack Overflow用户
提问于 2019-05-14 11:15:59
回答 8查看 9.3K关注 0票数 7

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

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

到目前为止,我知道简单的for循环更有效,但是我想用forEach()来执行这个简单的函数。

代码语言:javascript
运行
复制
function isUniform(array) {
    let uniChecker = array[0];
    array.forEach(function(element) {
        if (uniChecker !== element) {
            return false;
        }
    });
    return true;
}

它总是返回true,即使它应该返回false。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2019-05-14 11:25:54

forEach()抛出返回值,并总是返回未定义的

因此,无论您在代码中做了什么,来自forEach的返回值都不会被返回。

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

代码语言:javascript
运行
复制
function isUniform(array) {
 let flag=true;
    let uniChecker = array[0];
    array.forEach(function(element) {
        if (uniChecker !== element) {
          flag=false;
        }
    });
    return flag;
}
票数 4
EN

Stack Overflow用户

发布于 2019-05-14 11:20:16

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

更好的选择是每一个 / 一些,这些函数旨在测试数组中的项并检测异常(由您提供的任何条件确定),并在第一个不匹配的情况下退出。

代码语言:javascript
运行
复制
const isUniform = arr => arr.every(x => arr[0] === x)

游乐场

代码语言:javascript
运行
复制
const arr = [1,1,3,1,1,2]
// using `every` (recommended)
console.log(`Using 'every'...`);
let isUniform = arr => arr.every(x => {
  console.log(`Testing ${x}`);
  return arr[0] === x;
});
console.log(isUniform(arr));
// using `some` (bit more complicated but can still work)
console.log(`Using 'some'...`);
isUniform = arr => !arr.some(x => {
  console.log(`Testing ${x}`);
  return arr[0] !== x;
});
console.log(isUniform(arr));

票数 8
EN

Stack Overflow用户

发布于 2019-05-14 11:20:27

如果将返回false添加到forEach中,则无法获得正确的checked值。使用for循环,这样您就可以在找到项时添加中断:

代码语言:javascript
运行
复制
function isUniform(array) {
  let uniChecker = array[0];
  var isChecked = true;
  for (var i = 0; i < array.length; i++) {
    if (uniChecker !== array[i]) {
      isChecked = false;
      break;
    }
  }
  return isChecked;
}

或者您可以使用someevery来测试条目是否存在于数组中。

代码语言:javascript
运行
复制
function isUniform(array) {
  return array.some(x => array[0] === x);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56129153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档