2015-08-04 2 views
1

Есть ли встроенный метод в массиве, с которым я могу предоставить соответствующую функцию, и он вернет первое совпадение?Поиск первого элемента соответствия с обратным вызовом в ES5

var first = [1,2].whatIsThisFunction(function(v) { return v === 1; }); // 1 
+1

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

+0

Но я хочу что-то для ES5 – Ben

+3

использовать полипол в ссылке –

ответ

0

Вы можете использовать функцию некоторых(): https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

Он применяется обратный вызов по каждому пункту, и возвращается на первый матч.

var myArray = [...]; 

function callback(item){ 
    // Code 
} 

myArray.some(callback); 

Это довольно легко установить: have a look at this fiddle.

var first = [6,4,2,3,5]; 
var match; 

function isOdd(item){ 
    console.log(item); 
    if(item % 2 === 1){ 
     match = item; 
     return true; 
    } 
} 

first.some(isOdd); 
console.log("First match is :"+match); 
+0

, некоторый метод возвращает логическое – Masterakos

+0

Не совсем. Он прекратится, когда функция обратного вызова вернется. Но вы можете легко сохранить элемент, соответствующий вашему обратному вызову. Пожалуйста, посмотрите на скрипку для простого примера. – noKid

0

Рассмотрение:

  • IndexOf: нет обратного вызова возвращает индекс элемента или -1
  • map: callback, возвращает массив с одинаковой длиной, а не сам элемент
  • некоторые/каждый: обратный вызов, возвращает истину, если найдено в противном случае ложной
  • фильтр обратного вызова возвращает новый массив с элементами filterd
  • Foreach: обратный вызов, ничего не возвращает, неоднократный ненужное испытание с IndexOf
  • уменьшить: обратный вызов, возвращает что-либо, и возможность принимать возвращаемое значение в качестве параметра для перенастройки и быстрого доступа, если он найден.

Так вот оно в целом:

alert([1, 2, 7].reduce(function (r, _, __, o) { 
 
    return r || o[o.indexOf(7)]; 
 
}, undefined));

Версия без IndexOf:

function getFirstValueFn(v) { 
 
    return function (r, a) { 
 
     return (a === v || r) && a; 
 
    }; 
 
} 
 

 
alert([1, 2, 0, 7].reduce(getFirstValueFn(0), undefined)); // 0 
 
alert([1, 2, 0, 7].reduce(getFirstValueFn(7), undefined)); // 7 
 
alert([1, 2, 0, 7].reduce(getFirstValueFn(42), undefined)); // undefined

Смежные вопросы