предисловие
Иногда мы хотим узнать, есть ли в массиве элемент, удовлетворяющий условию при определенном условии, а затем вернуть элемент или значение индекса элемента. Javascript предоставляет нам множество методов, которые в основном делятся на поиск по значению и поиск по определенным условиям, давайте начнем знакомить с этими методами📄.
1. Array.prototype.includes()
includes()
Метод используется для определения того, содержит ли массив указанное значение, и возвращает true, если он есть, и false в противном случае.
Этот метод поддерживает два параметраvalueToFind
,fromIndex
(необязательный), первый параметр — «значение элемента для поиска», второй параметр — «индекс для начала поиска», если второй параметр отрицательный, он будет отсортирован из массива.длина + из индекса в порядке возрастания чтобы начать поиск по индексу (даже если прыгать вперед по абсолютному значению индексов fromIndex с конца, а затем искать назад).
var a = [1,2,3,4,5,6]
a.includes(2) // true
a.includes(2,3) // false
a.includes(5,-2) // true
a.includes(5,-1) // false
2. Array.prototype.indexOf()
indexOf()
Метод возвращает первый индекс указанного элемента в массиве или -1, если он не существует.
Этот метод поддерживает два параметраsearchElement
,fromIndex
(необязательно), первый параметр — «элемент для поиска», второй параметр — «позиция индекса для начала поиска», если значение индекса больше или равно длине массива, это означает, что массив не будет искаться, верните -1. Если значение индекса, указанное в параметре, является отрицательным, оно используется как смещение в конце массива, т. е. -1 означает поиск с последнего элемента, -2 означает начало со второго до последнего элемента и скоро. Примечание. Если значение индекса, указанное в параметре, является отрицательным, порядок поиска не изменяется, и порядок поиска по-прежнему остается спереди назад. Если индекс смещения по-прежнему меньше 0, будет запрошен весь массив. Его значение по умолчанию равно 0.
var array = [2, 5, 9];
array.indexOf(2); // 0
array.indexOf(7); // -1
array.indexOf(9, 2); // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0
3. Array.prototype.lastIndexOf()
lastIndexOf()
Метод возвращает индекс последнего указанного элемента в массиве или -1, если он не существует. Поиск вперед с конца массива, начиная сfromIndex
начать с.
Этот метод поддерживает два параметраsearchElement
,fromIndex
(необязательно), первый параметр — это «искомый элемент». Второй параметр — «обратный поиск с этой позиции», который по умолчанию равен длине массива минус 1 (arr.length — 1), то есть ищется весь массив. Если значение больше или равно длине массива, поиск выполняется во всем массиве. Если отрицательный, рассматривайте его как смещение вперед от конца массива. Даже если значение отрицательное, поиск в массиве все равно будет выполняться в обратном направлении. Если значение отрицательное и его абсолютное значение больше длины массива, метод возвращает -1, то есть поиск в массиве производиться не будет.
var array = [2, 5, 9, 2];
array.lastIndexOf(2); // 3
array.lastIndexOf(7); // -1
array.lastIndexOf(2, 3); // 3
array.lastIndexOf(2, 2); // 0
array.lastIndexOf(2, -2); // 0
array.lastIndexOf(2, -1); // 3
4. Array.prototype.some()
some()
Метод проверяет, проходит ли хотя бы один элемент в массиве предоставленный функциональный тест. Он возвращает значение логического типа.
❝Синтаксис: arr.some (обратный вызов (элемент [ индекс [ массив]) [ thisarg])
❞
"параметр":
callback
: Функция для проверки каждого элемента принимает три аргумента:
- Элемент в массиве элементов, который обрабатывается.
- index Необязательный, значение индекса обрабатываемого элемента в массиве.
- array Необязательный, просматривается сам массив.
thisArg
: необязательный, используется при выполнении обратного вызоваthis
стоимость.
В следующем примере проверяется, превышает ли какой-либо элемент массива значение 10.
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
Вы также можете использовать функции стрелок для достижения того же эффекта.
[2, 5, 8, 1, 4].some(x => x > 10); // false
[12, 5, 8, 1, 4].some(x => x > 10); // true
5. Array.prototype.every()
every()
Метод проверяет, проходят ли все элементы массива тест указанной функции. Он возвращает логическое значение.
❝Параметры этого метода такие же, как у метода Array.prototype.some(), поэтому здесь они не представлены. Разница между ними в том, что some() истинно, пока в массиве есть один элемент, удовлетворяющий условию, а Every() истинно только тогда, когда выполняются все условия.
❞
Проверяет, все ли элементы в массиве больше 10.
function isBigEnough(element, index, array) {
return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough); // true
6. Array.prototype.filter()
filter()
метод создает новый массив, содержащий все элементы теста, реализованного предоставленной функцией.
Параметры этого метода такие же, как у some(), every(), а обратный вызов — это функция, используемая для проверки каждого элемента массива. Возврат true означает, что элемент проходит тест и сохраняет элемент, false в противном случае.
В следующем примере фильтр используется для создания нового массива, состоящего из элементов исходного массива со значениями больше 10.
function isBigEnough(element) {
return element >= 10;
}
var filtered = [12, 5, 8, 130, 35].filter(isBigEnough);
// filtered is [12, 130, 35]
7. Array.prototype.find()
find()
Метод возвращает значение первого элемента массива, удовлетворяющего предоставленной тестовой функции. В противном случае вернуть неопределенное значение.
❝Параметры этого метода такие же, как у some(), every(), filter().
❞
Используйте свойства объекта, чтобы найти объект в массиве.
var inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'orange', quantity: 5}
];
function findOranges(fruit) {
return fruit.name === 'orange';
}
console.log(inventory.find(findOrange));
// { name: 'orange', quantity: 5 }
8. Array.prototype.findIndex()
findIndex()
Метод возвращает индекс первого элемента в массиве, который удовлетворяет предоставленной тестовой функции. Возвращает -1, если соответствующий элемент не найден.
❝Параметры этого метода такие же, как у find(), за исключением того, что один возвращает элемент, а другой возвращает значение индекса элемента в массиве.
❞
Найдите в массиве индекс объекта с именем Orange.
var inventory = [
{name: 'apple', quantity: 2},
{name: 'banana', quantity: 0},
{name: 'orange', quantity: 5}
];
function findOrange(fruit) {
return fruit.name === 'orange';
}
console.log(inventory.findIndex(findOrange));
// { name: 'orange', quantity: 5 }
Суммировать
Для облегчения поиска и запоминания я сведу эти методы в таблицу 📝.
имя метода | параметр | описывать | возвращаемое значение |
---|---|---|---|
includes | searchElement, fromIndex | Проверить, содержит ли массив указанное значение | Логическое значение |
indexOf | searchElement, fromIndex | Найти значение индекса первого вхождения элемента в массив | значение индекса или -1 |
lastIndexOf | searchElement, fromIndex | Найти значение индекса последнего вхождения элемента в массив | значение индекса или -1 |
some | callback[, thisArg] | Определить, есть ли квалифицированный элемент в массиве | Логическое значение |
every | callback[, thisArg] | Проверить, удовлетворяет ли каждый элемент массива условию | Логическое значение |
filter | callback[, thisArg] | Возвращает массив всех элементов, соответствующих условию | множество |
find | callback[, thisArg] | Возвращает первый элемент массива, соответствующий условию | элемент в массиве или неопределенный |
findIndex | callback[, thisArg] | Возвращает индекс первого элемента, соответствующего условию | значение индекса или -1 |