为什么我的函数只返回一个符合条件的项?

时间:2018-04-09 00:44:10

标签: javascript for-loop

我是javascript的新手,我正在编写一个编码挑战,要求你构建一个函数,该函数将一个字符串数组作为参数,并返回包含四个字母或字符的所有字符串。我的函数将返回它找到的第一个四字符项,但随后停止并且不再返回任何四个字符的项。代码如下:

function isFourLetters(arr) {
  for (i=0; i < arr.length; i++) {
    if (arr[i].length===4) {
      return arr[i];
    }
  }
}

我盯着这个看了10分钟左右,试图看看为什么for-loop一旦到达一个有四个字符的数组元素就停止了,无论出于什么原因我都看不到它,这让我觉得有一些关于for-loops我显然不明白。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:0)

你可以声明一个“tmpArr”并在循环找到时添加4个字母的字符串。然后在函数末尾返回“tmpArr”。

答案 1 :(得分:0)

您的函数返回第一个匹配项(带有4个字母的字符串)。

您需要将这些匹配存储到数组中

function isFourLetters(arr) {
  for (i=0; i < arr.length; i++) {
    if (arr[i].length===4) {
      return arr[i]; // <--- Here your problem
    }
  }
}

另一种方法是将匹配推送到数组中:

function isFourLetters(arr) {
  var matcher = [];
  for (i=0; i < arr.length; i++) {
    if (arr[i].length===4) {
      matches.push(arr[i]);
    }
  }
  return matches;
}

或者更好的是,请查看功能 filter

function isFourLetters(arr) {
  return arr.filter(function(str) {
      return str.length === 4;
  });
}

答案 2 :(得分:0)

问题在于,当您输入if条件时,您会返回。返回打破了函数范围并仅返回arr [i]。 您应该在函数内部创建一个新数组,然后使用if在返回的数组上添加元素。然后,当for循环结束时,您可以返回整个新数组。

答案 3 :(得分:0)

您可以在数组中使用过滤器方法。过滤器()方法创建一个新数组,其中包含所有通过所提供函数实现的测试的元素。

var arr = ['1234','spray', 'limit',test', 'elite', 'exuberant', 'destruction', 'present'];

const result = arr.filter(arrElement => arrElement.length === 4);

console.log(result);

//结果:[1234,测试]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter