Vyhledávání na webu

javascript - Jak zastavit cyklus, jakmile je něco nalezeno?


Pokud je nalezeno three, mělo by to vrátit true a zastavit iteraci. V opačném případě vrátit false, pokud není nalezen.

Používám filter() - je špatný přístup ho používat?

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

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

console.log(found);

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

Odpověď č. 1

V tomto kontextu můžete použít array#some,

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

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

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

Pokud použijete filter, bude pole filtrované na základě hodnoty pravdivosti vrácené uvnitř funkce callBack. Takže pokud bude nalezena shoda, což znamená, že funkce vrátila hodnotu true, pak bude prvek v této konkrétní iteraci shromážděn do array a nakonec bude pole vráceno.

Proto ve vašem případě bude jako výsledek vráceno ["three", "theree"]. Pokud nemáte žádné "three", bude vráceno prázdné pole. V tomto kontextu musíte provést další kontrolu, abyste našli pravdivou hodnotu jako výsledek.

Například:

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

Takže abychom se vyhnuli té přehnané situaci, používáme Array#some.

Odpověď č. 2

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);