一旦发现,如何停止循环?

时间:2016-12-25 14:43:44

标签: javascript

如果找到three,那么它应该返回true并停止迭代。否则,如果找不到则返回false。

我正在使用filter() - 这是错误的使用方法吗?

var data = [
  'one',
  'two',
  'three',
  'four',
  'three',
  'five',
];

found = data.filter(function(x) {
   console.log(x);
   return x == "three";
});

console.log(found);

演示:https://jsbin.com/dimolimayi/edit?js,console

4 个答案:

答案 0 :(得分:6)

您可以在此背景下使用array#some

var data = [
  'one',
  'two',
  'three',
  'four',
  'three',
  'five',
];

found = data.some(function(x) {
   return x == "three";
});

console.log(found); // true or false

如果使用filter,则将根据callBack函数内返回的truthy值过滤数组。因此,如果找到任何匹配的含义,如果函数返回值true,则该特定迭代的元素将被收集在array中,最后将返回该数组。

因此,在您的情况下,["three", "theree"]将作为结果返回。如果你没有任何"three",那么将返回一个空数组。在这种情况下,你必须进行额外的检查以找到结果的真值。

例如:

var res = arr.filter(itm => someCondition);
var res = !!res.length;
console.log(res); //true or false.

为了避免过度杀戮的情况,我们正在使用Array#some。

答案 1 :(得分:0)

var data = [
  'one',
  'two',
  'three',
  'four',
  'three',
  'five',
];

for(var i=0;i<data.length;i++){
    console.log(data[i]);
  if(data[i]=="three"){
    var found=data[i];
    break;
  }
}

console.log(found);

答案 2 :(得分:0)

你必须返回false才能退出函数,但是你已经在过滤函数中使用了return语句而你不能使用2个返回语句......我想出的另一个解决方案是:

var data = [
  'one',
  'two',
  'three',
  'four',
  'three',
  'five',
];

var filteredData = [];

function a(i,e){
   console.log(e);

  if(e == "three"){
    filteredData.push(e);
    return false;
  }
}

$(data).each(a);
console.log(filteredData);

一旦命中“三”就会爆发,并将其存储在filteredData数组中,以便将来可以使用它... 希望这会有所帮助......

答案 3 :(得分:0)

直接的方法。

    var data = [
      'one',
      'two',
      'three',
      'four',
      'three',
      'five',
    ];
    
    
    found = data.indexOf('three') == -1 ?  false :  true;
    console.log(found);