javascript - 为什么我的 for 循环返回正确答案,但我的 forEach 却没有?

标签 javascript arrays for-loop foreach

这是我关于 SO 的第一个问题。我有一个任务,我应该在其中创建一个具有两个参数的函数——第一个是字符串数组,第二个是可能在数组中匹配的字符串。

我有两种函数变体:一种使用“for”循环,另一种使用 .forEach() 方法。 for 循环根据第二个参数是否存在于数组中准确地返回“true”/“false”。 forEach 始终返回“false”。

谁能解释一下为什么?代码如下:

.forEach() 版本:

function insideArray (array, word) {
  var value;
  array.forEach(function(each) {
    if(each === word) {
      value = "true";
      return value;
    }
    else {
      value = "false";
    }
  });
  return value;
}

for 循环版本:

function insideArray (array, word) {
  var value;
  for(var i = 0; i < array.length; i++) {
    if(array[i] === word) {
      value = "true";
      return value;
    }
    else {
      value = "false";
    }
  }
  return value;
}

示例数组:

var heroArray = [ "spiderman", "wolverine", "batman", "greenArrow", "boosterGold" ];

测试.forEach():

insideArray(heroArray, "spiderman");
"false"

循环测试:

insideArray(heroArray, "spiderman");
"true"

提前感谢您的帮助!

最佳答案

发生这种情况是因为您是从 forEach 的回调函数而不是从 insideArray() 返回,所以最终 insideArray() 将始终返回 false,除非您匹配数组中的最后一个元素。您可以通过使用 false 初始化值并删除 else 条件来修复代码,如下所示:

function insideArray (array, word) {
  var value = "false";
  array.forEach(function(each) {
    if(each === word) {
      value = "true";
    }
  });
  return value;
}

另请注意,您可以使用 indexOf 为此编写更简单的代码:

function insideArray (array, word) {
  return array.indexOf(word) >= 0 ? "true" : "false";
}

关于javascript - 为什么我的 for 循环返回正确答案,但我的 forEach 却没有?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45537207/

相关文章:

JavaScript 提交按钮从 Spring MVC 返回对象响应

javascript - 如何使用 vue $watch 获取数组内对象属性的变化?

c# - string[] 的笛卡尔积与自身直接在 C# 中没有重复/克隆

php - 如何阻止 MySQL 复制返回数组中每一列的条目?

algorithm - 计算/计算for循环内for循环的原始操作

javascript - 删除javascript中两个indexOf之间的字符串部分

arrays - 在 RISC-V 中遍历数组的不同方法

java - Java 中的空指针异常。 (数组的 for 循环被破坏了?)

java - 扫描仪无法正常工作

javascript - Soundcloud SDK 3. 最喜欢的(喜欢的)歌曲的不间断流