在js中查找并返回数组的第一个匹配元素

时间:2018-02-09 14:35:05

标签: javascript arrays

我正在研究一个简单的函数,该函数应该使用for循环返回与我的条件匹配的数组的第一个元素。它会不断返回数组的第一个元素,无论它是否符合设置标准。知道bug在哪里吗?我也试过.find()方法,同样的问题。

function wheresTheBeef(array) {
  for (var i = 0; i < array.length; i++) {
  if  (array[i] == 'fillet' || 'strip' || 'sirloin') {
      return array[i];
    }
    else {
      return 'there is no beef!'
    }
  }
}

4 个答案:

答案 0 :(得分:1)

您的情况不正确,请更改:

if  (array[i] == 'fillet' || 'strip' || 'sirloin') {

这个:

if  (array[i] == 'fillet' || array[i] == 'strip' || array[i] == 'sirloin') {

改变的原因:

&#13;
&#13;
let var1="something";

if (var1) {
  console.log("var1 has a truthy value");
}

if (1==0 || "something") {
  console.log("condition is true");
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您需要使用字符串测试每个元素,因为每个非空字符串都是truthy

if (array[i] === 'fillet' || array[i] === 'strip' || array[i] === 'sirloin') {

Array#findArray#includes

几乎相同
found = array.find(item => ['fillet', 'strip', 'sirloin'].includes(item));

答案 2 :(得分:0)

所以你只需要摆脱第二个return语句(和else)。只要你return,执行就会停止。因此,如果您永远不会返回,循环将继续,直到满意为止。

如果您仍然需要there is no beef语句,则可以将其置于循环之外。如果循环执行且永远不满足条件,那么它将继续返回该语句。

答案 3 :(得分:0)

这里有 2个问题

  1. 您的检查是否有误,因为array[i] == 'fillet' || 'strip' || 'sirloin'始终 TRUE

  2. 你不应该直接在else分支中返回,否则你的代码逻辑只检查第一个元素

  3. &#13;
    &#13;
    function wheresTheBeef(array) {
      for (var i = 0; i < array.length; i++) {
      if  (array[i] == 'fillet' || array[i] == 'strip' || array[i] == 'sirloin') {
          return array[i];
        }
        else {
          continue
        }
      }
      return "there is no beef"
    }
    &#13;
    &#13;
    &#13;