Array.prototype.indexOf()
Метод indexOf()
(індекс (значення)) примірників Array
повертає перший індекс, за яким даний елемент можна знайти в масиві, або -1
– якщо його немає.
Спробуйте його в дії
Синтаксис
indexOf(searchElement)
indexOf(searchElement, fromIndex)
Параметри
searchElement
(елемент пошуку)Шуканий у масиві елемент.
fromIndex
(від індексу) Необов'язковеІндекс від нуля для початку пошуку, перетворений на ціле число.
- Від'ємний індекс рахується від кінця масиву: якщо
-array.length <= fromIndex < 0
, то використовуєтьсяfromIndex + array.length
. Зверніть увагу, що у такому випадку пошук все одно відбувається від початку до кінця. - Якщо
fromIndex < - array.length
, або якщоfromIndex
опущено, то використовується0
, тобто пошук відбувається в усьому масиві. - Якщо
fromIndex >= array.length
, то пошук не відбувається, і повертається-1
.
- Від'ємний індекс рахується від кінця масиву: якщо
Повернене значення
Перший індекс searchElement
в масиві; -1
, якщо нічого не знайдено.
Опис
Метод indexOf()
порівнює searchElement
з елементами масиву за допомогою строгої рівності (того самого алгоритму, що використовується оператором ===
). Значення NaN
при порівнянні ніколи не бувають рівними будь-чому, тому indexOf()
завжди повертає -1
, коли searchElement
– це NaN
.
Метод indexOf()
пропускає порожні комірки в розріджених масивах.
Метод indexOf()
є узагальненим. Він лишень очікує, що значення this
матиме властивість length
, а також властивості з цілочисловими ключами.
Приклади
Використання indexOf()
У наступному прикладі indexOf()
використовується для пошуку значень у масиві.
const array = [2, 9, 9];
array.indexOf(2); // 0
array.indexOf(7); // -1
array.indexOf(9, 2); // 2
array.indexOf(2, -1); // -1
array.indexOf(2, -3); // 0
Не можна використовувати indexOf()
для пошуку NaN
.
const array = [NaN];
array.indexOf(NaN); // -1
Пошук усіх входжень елемента
const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
const idx = array.indexOf(element);
while (idx !== -1) {
indices.push(idx);
idx = array.indexOf(element, idx + 1);
}
console.log(indices);
// [0, 2, 4]
Визначення, чи знаходиться елемент у масиві, чи ні, та оновлення масиву
function updateVegetablesCollection(veggies, veggie) {
if (veggies.indexOf(veggie) === -1) {
veggies.push(veggie);
console.log(`Нова овочева колекція: ${veggies}`);
} else {
console.log(`${veggie} уже є в овочевій колекції.`);
}
}
const veggies = [
"картопля",
"помідор",
"червоний гострий перець",
"зелений болгарський перець",
];
updateVegetablesCollection(veggies, "шпинат");
// Нова колекція veggies: картопля,помідор,червоний гострий перець,зелений болгарський перець,шпинат
updateVegetablesCollection(veggies, "шпинат");
// шпинат уже є в овочевій колекції.
Використання indexOf() на розріджених масивах
Не можна використовувати indexOf
для пошуку порожніх комірок в розріджених масивах.
console.log([1, , 3].indexOf(undefined)); // -1
Виклик indexOf() на об'єктах-немасивах
Метод indexOf()
зчитує з this
властивість length
, а потім звертається до кожної властивості, чий ключ є невід'ємним цілим числом, меншим за length
.
const arrayLike = {
length: 3,
0: 2,
1: 3,
2: 4,
3: 5, // ігнорується indexOf(), оскільки length – 3
};
console.log(Array.prototype.indexOf.call(arrayLike, 2));
// 0
console.log(Array.prototype.indexOf.call(arrayLike, 5));
// -1
Специфікації
Сумісність з браузерами
desktop | mobile | server | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
indexOf
|
Chrome Full support 1 | Edge Full support 12 | Firefox Full support 1.5 | Internet Explorer Full support 9 | Opera Full support 9.5 | Safari Full support 3 | WebView Android Full support 37 | Chrome Android Full support 18 | Firefox for Android Full support 4 | Opera Android Full support 10.1 | Safari on iOS Full support 1 | Samsung Internet Full support 1.0 | Deno Full support 1.0 | Node.js Full support 0.10.0 |