Array.lastIndexOf() в JavaScript — останній збіг


Опис

Метод lastIndexOf() здійснює пошук елемента (параметр searchElement) у масиві, використовуючи алгоритм строгої рівності, той самий, що й у оператора ===. Однак варто пам'ятати про особливості:

  • NaN завжди розглядається як нерівний будь-якому іншому значенню, тому lastIndexOf() поверне -1, якщо searchElement є NaN.
  • Метод lastIndexOf() починає пошук з кінця масиву і рухається до його початку, що допомагає виявити останнє входження елемента.
  • У випадку розріджених масивів (з пустими значеннями), lastIndexOf() ігнорує порожні ячейки.

Така поведінка методу особливо корисна при роботі з великими масивами даних або в ситуаціях, коли важливо точно визначити позицію останнього входження елемента.

Розглянемо наступний код:

let animals = ['cat', 'dog', 'elephant', 'dog', 'bird'];
let lastIndex = animals.lastIndexOf('dog');

console.log(lastIndex); // 3

У цьому прикладі ми маємо масив animals, який містить декілька різних тварин. Ми використовуємо метод lastIndexOf() для пошуку останнього входження слова 'dog'. У результаті ми отримуємо індекс 3, що відповідає другому входженню 'dog' у нашому масиві.

автор: Bond

Загальний опис

автор: NagarD

Порада

При використанні методу lastIndexOf() важливо мати на увазі, що він шукає значення у масиві з кінця. Це означає, що метод поверне індекс останнього входження значення. Якщо вам потрібно знайти перше входження, розгляньте використання методу Array.prototype.indexOf().

автор: Bond
Порада
автор: Bond
Нотатка

Метод lastIndexOf() є універсальним. Він очікує, що значення this міститиме властивість length і буде мати властивості з цілочисельними ключами.

автор: Bond
Нотатка

Метод lastIndexOf() також приймає необов'язковий аргумент, який вказує з якого індексу починати пошук у масиві. Це дозволяє вам обмежити область пошуку.

За замовчуванням, пошук відбувається від кінця масиву (індекс -1), але ви можете вказати інший індекс для початку пошуку, наприклад: myArray.lastIndexOf('apple', 3). У цьому прикладі пошук відбуватиметься від індексу 3.

автор: Bond

Синтаксис

lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)

Параметри

searchElement

Елемент, який потрібно знайти у масиві.

автор: Bond

fromIndex

Індекс (перетворений у ціле число), з якого почати зворотній пошук, враховуючи індексацію з нуля.

  • Від'ємний індекс відлічується назад від кінця масиву — якщо fromIndex < 0, використовується fromIndex + array.length.
  • Якщо fromIndex < -array.length, пошук в масиві не проводиться, і повертається -1.
  • Якщо fromIndex >= array.length або fromIndex пропущено, використовується array.length - 1, що призводить до пошуку по всьому масиву.
автор: Bond

Повернення

integer

Останній індекс серед знайдених елементів у масиві; -1, якщо елемент не знайдений.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 1.5 3 9.5 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
0.10.0 1.0

Приклади

+ запропонувати свій приклад у пісочниці

Метод lastIndexOf() спочатку зчитує властивість length даного об'єкта, а потім отримує доступ до кожної властивості з ключем, який є не від'ємним цілим числом меншим за значення length.

const arrayLike = {
  length: 3,
  0: 2,
  1: 3,
  2: 2,
  3: 5, // проігноровано методом lastIndexOf(), оскільки length дорівнює 3
};

console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));
// 2

console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));
// -1
автор: Bond

Цей приклад використовує метод lastIndexOf() для пошуку останнього входження заданого елемента в масиві animals. Результати пошуку виводяться у відповідні елементи span на сторінці. Очікувані результати цього прикладу: індекс останнього входження 'Dodo' - 3, індекс останнього входження 'Tiger' - 1.

HTML

<header>
  <h2 class="title">lastIndexOf() Метод</h2>
  <p class="description">Цей метод повертає індекс останнього входження заданого елемента в масиві. Якщо елемент не знайдено, повертається -1.</p>
</header>
<main>
  <pre>['Dodo', 'Tiger', 'Penguin', 'Dodo']</pre>
  <div>
    <h3>Результати:</h3>
    <p>Індекс останнього входження 'Dodo': <span id="result1"></span></p>
    <p>Індекс останнього входження 'Tiger': <span id="result2"></span></p>
  </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;
  -webkit-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  -moz-box-shadow: 0px 0px 3px 0px rgba(118, 118, 118, 1);
  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 div {
  padding: 15px;
  background-color: #f9f9f9;
  border: 1px solid #ddd;
  border-radius: 5px;
}

main div h3 {
  margin-top: 0;
}

main div p {
  margin: 10px 0;
}

main div p span {
  font-weight: bold;
}

JS

const animals = ['Dodo', 'Tiger', 'Penguin', 'Dodo'];

document.getElementById('result1').innerText = animals.lastIndexOf('Dodo');
document.getElementById('result2').innerText = animals.lastIndexOf('Tiger');
//# sourceURL=pen.js
автор: Bond

Що насправді означає другий аргумент lastIndexOf() і чому перевірка if (…) на його результаті працює навпаки.

const log = ['open', 'save', 'open', 'close'];

console.log(log.lastIndexOf('open')); // 2 — останнє входження
console.log(log.indexOf('open'));     // 0 — а це перше
console.log(log.lastIndexOf('quit')); // -1

// другий аргумент — ЗВІДКИ почати, рухаючись назад
console.log(log.lastIndexOf('open', 1));   // 0 — дивилися лише 1 і 0
console.log(log.lastIndexOf('close', 2));  // -1, хоча 'close' у масиві є
console.log(log.lastIndexOf('close', -1)); // 3 — від'ємний рахується з кінця

// строге порівняння: об'єкти за посиланням, NaN не знаходиться
console.log([{ id: 1 }].lastIndexOf({ id: 1 }));          // -1
console.log([NaN].lastIndexOf(NaN), [NaN].includes(NaN)); // -1 true

// перевірка через if() працює навпаки
console.log(Boolean(log.lastIndexOf('quit')), log.lastIndexOf('quit') !== -1); // true false
автор: NagarD

Приклад використовує lastIndexOf() для знаходження значень в масиві.

const numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
автор: Bond

Приклад використовує lastIndexOf для знаходження всіх індексів входження елемента в заданому масиві, використовуючи push для додавання їх до іншого масиву при їх знаходженні.

const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let idx = array.lastIndexOf(element);
while (idx !== -1) {
  indices.push(idx);
  idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;
}

console.log(indices);
// [4, 2, 0]
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід