Array.indexOf() в JavaScript — позиція елемента в масиві
Опис
Метод indexOf() пропонує простий спосіб визначення позиції елемента в масиві. Він порівнює searchElement з елементами масиву, використовуючи строгий принцип рівності — такий самий, як і у оператора ===. Цікаво, що значення NaN при такому порівнянні завжди вважається нерівним будь-якому іншому значенню, навіть самому собі. Отже, при спробі знайти NaN метод indexOf() завжди поверне -1.
Основна робота методу полягає в тому, що він повертає індекс першого входження searchElement у масив, або -1, якщо такого елемента немає. Таким чином, легко визначити, чи містить масив певний елемент, порівнюючи результат indexOf() з -1.
Приклад:
let fruits = ["apple", "banana", "cherry"];
let index = fruits.indexOf("banana");
console.log(index); // 1
У цьому прикладі ми шукаємо індекс елемента banana в масиві fruits. Метод indexOf() повертає значення 1, оскільки banana є другим елементом масиву (індексація починається з 0).
Загальний опис
автор: NagarD
- Нотатка
-
Метод
автор: BondindexOf()приймає другий необов'язковий параметрfromIndex, який визначає початкову позицію для пошуку. Якщо цей параметр не вказано, пошук автоматично почнеться з нульового індексу. Якщо вам потрібно розпочати пошук, скажімо, з третьої позиції, ви можете використовувати наступний синтаксис:myArray.indexOf('apple', 2). - Нотатка
-
Важливо пам'ятати, що
автор: BondindexOf()використовує строгу рівність (===) для порівняння елементів. Це означає, що він порівнює значення елементів за типом та значенням. Для ілюстрації: якщо у вашому масиві є елемент з числовим значенням5, запитmyArray.indexOf('5')поверне результат-1, адже хоча числове5та рядкове'5'можуть виглядати однаково, вони є різними типами даних. - Нотатка
-
Важливо пам'ятати, що
автор: BondindexOf()порівнює елементи за їхніми значеннями, а не за їхніми посиланнями. Тому, наприклад, при пошуку об'єкта в масиві об'єктів,indexOf()не зможе знайти об'єкт, навіть якщо його вміст ідентичний шуканому, якщо вони є різними об'єктами в пам'яті. - Нотатка
-
Зверніть увагу на те, що при великих масивах або частих операціях пошуку може бути ефективніше використовувати структури даних, які спеціально розроблені для цих цілей, такі як хеш-таблиці або дерева пошуку.
автор: Bond - Нотатка
-
автор: BondindexOf()є універсальним методом, що вимагає наявності властивостіlengthта інших властивостей з цілочисельними ключами вthis. - Нотатка
-
Зверніть увагу, що
автор: BondindexOf()ігнорує порожні слоти в розріджених масивах.
Синтаксис
indexOf(searchElement)
indexOf(searchElement, fromIndex)
Параметри
searchElement-
Елемент, який потрібно знайти в масиві.
автор: Bond fromIndex-
Індекс, з якого почати пошук, перетворений у ціле число.
- Від'ємний індекс рахується з кінця масиву - якщо
fromIndex < 0, використовуєтьсяfromIndex + array.length. Зверніть увагу, що в цьому випадку масив все ще проглядається з переду назад. - Якщо
fromIndex < -array.lengthабоfromIndexпропущено, використовується 0, що спричинює пошук по всьому масиву. - Якщо
fromIndex >= array.length, масив не проглядається, і повертається -1.
- Від'ємний індекс рахується з кінця масиву - якщо
Повернення
integer-
Індекс першого елемента (який дорівнює
автор: BondsearchElement) в масиві. Повертає-1, якщо елемент не знайдено.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 1 | 1.5 | 3 | 9.5 | 12 | 9 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 18 | 4 | 1 |
| Переглядач | ||
|---|---|---|
| 0.10.0 | 1.0 |
Приклади
+ запропонувати свій приклад у пісочниці
У цьому прикладі ми використовуємо метод indexOf() на об'єкті arrayLike, який не є масивом. Ми використовуємо call() для виклику методу indexOf() на об'єкті arrayLike, як будто це метод масиву. Метод indexOf() повертає індекс першого входження шуканого елемента. У нашому випадку, ми шукаємо значення 2 і 5. Оскільки об'єкт arrayLike має властивість length, рівну 3, пошук за межами довжини об'єкта повертає значення -1.
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
У цьому прикладі ми використовуємо метод indexOf() для пошуку індексу певного елемента в масиві. Метод indexOf() повертає перший індекс входження шуканого елемента або -1, якщо елемент не знайдено.
HTML
<header>
<h2 class="title">Пошук індексу елемента в масиві</h2>
<p class="description">У цьому прикладі ми використовуємо метод indexOf() для пошуку індексу певного елемента в масиві.</p>
</header>
<main>
<pre>const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];</pre>
<div id="output"></div>
</main>
CSS
body {
font-size: 16px;
line-height: 1.5;
font-family: monospace;
}
pre {
color: #ff0000;
}
header {
background-color: #f1f1f1;
margin-bottom: 25px;
padding: 15px;
box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
}
header h2.title {
padding-bottom: 15px;
border-bottom: 1px solid #999;
}
header p.description {
font-style: italic;
color: #222;
}
main {
margin-top: 20px;
}
#output {
font-weight: bold;
}
JS
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
const output = document.getElementById('output');
output.innerHTML += `Індекс елемента "bison": ${beasts.indexOf('bison')}<br>`;
// Очікуваний результат: 1
output.innerHTML += `Індекс елемента "bison" починаючи з індексу 2: ${beasts.indexOf('bison', 2)}<br>`;
// Очікуваний результат: 4
output.innerHTML += `Індекс елемента "giraffe": ${beasts.indexOf('giraffe')}<br>`;
// Очікуваний результат: -1
//# sourceURL=pen.js
Чому перевірка if (arr.indexOf(x)) хибна для обох випадків одразу і що з цим робити.
const fruits = ['яблуко', 'банан', 'слива'];
console.log("indexOf('банан'):", fruits.indexOf('банан')); // 1
console.log("indexOf('кавун'):", fruits.indexOf('кавун')); // -1
// перевірка через if ламається двічі
if (fruits.indexOf('яблуко')) console.log('якби if працював, тут було б «є яблуко»');
if (fruits.indexOf('кавун')) console.log('а замість цього спрацювало «є кавун» — бо -1 істинне');
// як треба
console.log("!== -1 для 'кавун':", fruits.indexOf('кавун') !== -1); // false
console.log("includes('яблуко'):", fruits.includes('яблуко')); // true
// строге порівняння: об'єкти за посиланням, NaN не знаходиться
const users = [{ id: 1 }, { id: 2 }];
console.log('indexOf об\'єкта:', users.indexOf({ id: 2 })); // -1
console.log('findIndex за полем:', users.findIndex(u => u.id === 2)); // 1
console.log('NaN:', [NaN].indexOf(NaN)); // -1
У цьому прикладі ми використовуємо indexOf() для пошуку значення undefined у масиві [1, , 3]. Оскільки між другим і третім елементами є пустий слот, пошук повертає значення -1. Ви можете скопіювати цей код для використання у своєму довіднику.
console.log([1, , 3].indexOf(undefined)); // -1
Приклад використовує 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
У цьому прикладі ми знаходимо всі входження елемента "a" у масиві array і зберігаємо їх індекси в indices. В результаті виводимо масив індексів [0, 2, 4].
const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let idx = array.indexOf(element);
while (idx !== -1) {
indices.push(idx);
idx = array.indexOf(element, idx + 1);
}
console.log(indices);
// [0, 2, 4]
Коментарі
Коментарів ще немає — будьте першим!