Метод find в JavaScript
Для поиска элементов в массиве есть несколько методов в JavaScript. Практика показывает, что indexOf и lastIndexOf ищут определенный элемент без какого-либо препятствия. С появлением новых расширений, возможности работы с массивами увеличились. Теперь можно не просто отыскать какой-либо элемент, а с условием поиска. В этом нам поможет новый метод find.
Методы indexOf, lastIndexOf и includes
Метод indexOf(elem, from) находит элемент в массиве и возвращает индекс элемента. Если элемента не существует, то возвращается -1. Второй параметр может быть проигнорирован. Он позволяет искать индекс элемента, начиная с указанного индекса в массиве.
Метод lastIndexOf(elem, from) аналогичен предыдущему. Только поиск ведется с конца массива. Возвращает индекс и -1 в случае отсутствия элемента.
Метод includes(elem, from), в отличие от двух предыдущих, возвращает true, если указанный элемент найден. В противном случае возвращается false. Данный метод не возвращает числовое значение.
Пример:
var arr = [33, 44, 84, 45, 12, 33];
console.log(arr.indexOf(84)); // возвратит индекс 2
console.log(arr.indexOf(135)); // возвратит -1
console.log(arr.lastIndexOf(33)); // возвратит 5, так как ищет с конца массива
console.log(arr.includes(45)); //true
console.log(arr.includes(130)); // false
Как видно здесь все просто. Однако что если нам нужно расширить поиск условиями. Для этого есть более модернизированные методы.
Метод find
Сигнатура метода find следующая: arr.find(function(element, index, arr){операторы}). В параметр метода вставляется колбэк с тремя параметрами, которые расширяют поиск:
- element — элемент массива для поиска;
- index — индекс искомого элемента;
- arr — массив в котором будет вестись поиск.
Второй и последние параметры не обязательны. Сама функция возвращает одно из двух значений: сам элемент, если он найден, то поиск прерывается; undefined в случае, если элемент не был найден.
Пример:
var ages = [3, 10, 18, 20]; // массив для поиска
function checkAdult(age) { функция колбек для вставки в параметр метода find
return age > 18;
}alert(ages.find(checkAdult)); // 20, так как age больше 18
Здесь мы вставили нашу искусственную функцию, которая принимает единственный параметр age, то есть — элемент. Функция возвращает 20, так как по условию, значение элемента должно быть больше 18. Этот метод должен всегда что-либо возвращать, что является условием корректной его работы.
Метод сам по себе срабатывает для каждого элемента массива и останавливает свою работу на том элементе, на котором соответствует условие, а затем возвращает результат. Если условие не один элемент не соответствует условию, то возвращается undefined.
Пример:
var clients = [ // создали массив объектов
{id: 10, name: «Jannet»},
{id: 20, name: «Irma»},
{id: 20, name: «April»}
];var object = clients.find(function(human){
return human.id == 20;
}
); // true, так как в массиве объектов есть элемент со свойством id = 20. Будет возвращен объект с именем Irmaalert(object.name); // Irma
Данный метод, а также остальные методы, которые включают в свой параметр колбэк, избавляют программиста писать алгоритмы для перебора массива и поиска элемента с условием. Для этого есть функция, которая требует в лучшем случае написать всего пару строк.
Для усложнения данного метода можно также прибавить к условию и номер индекса. Так метод будет проверять не только на значение элемента, но и на его индекс. Это уместно в том случае, если в массиве есть два одинаковых элемента с разными индексами и найти нужно какой-то один.
При этом, третий параметр метода указывает на текущий массив. Поэтому не обязательно перебирать массив, посредством которого метод был вызван, третий параметр может указать на любой массив в программе.