JS метод NodeList.entries()


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

NodeList.entries() є вбудованим методом в JavaScript, який повертає новий об'єкт Iterator, що містить пари ключ/значення для всіх елементів NodeList. Цей метод дозволяє ітерувати елементи NodeList за допомогою циклів або інших конструкцій, які підтримують ітерацію.

Метод entries() корисний, коли потрібно отримати як індекси, так і значення елементів NodeList. Він часто використовується у поєднанні з циклами for...of або розподіленням масивів для зручного перебору елементів.

Розглянемо приклад використання entries() з NodeList, що містить всі елементи <p> на веб-сторінці:

const paragraphs = document.querySelectorAll('p');

// Ітерація з використанням циклу for...of
for (const [index, paragraph] of paragraphs.entries()) {
  console.log(`Параграф ${index + 1}: ${paragraph.textContent}`);
}

// Ітерація з використанням розподілення масиву
[...paragraphs.entries()].forEach(([index, paragraph]) => {
  console.log(`Параграф ${index + 1}: ${paragraph.textContent}`);
});

У цьому прикладі ми спочатку отримуємо NodeList всіх елементів <p> за допомогою document.querySelectorAll('p'). Потім ми використовуємо метод entries() для отримання ітератора пар ключ/значення.

У першому випадку ми ітеруємо через ітератор за допомогою циклу for...of. Для кожної ітерації ми деструктуризуємо пару [index, paragraph], де index - індекс поточного елемента, а paragraph - сам елемент. Потім ми виводимо індекс та текстовий вміст елемента в консоль.

У другому випадку ми використовуємо розподілення масиву [...paragraphs.entries()] для конвертації ітератора в масив пар ключ/значення. Потім ми ітеруємо через цей масив за допомогою методу forEach і виконуємо ті самі дії з індексами та елементами.

Метод entries() також корисний для перетворення NodeList на масив пар ключ/значення для подальшого використання з іншими методами масивів, такими як map, filter або reduce. Ось приклад, де ми фільтруємо NodeList за допомогою entries() та filter:

const paragraphs = document.querySelectorAll('p');
const longParagraphs = [...paragraphs.entries()]
  .filter(([index, paragraph]) => paragraph.textContent.length > 100)
  .map(([index, paragraph]) => ({
    index,
    text: paragraph.textContent,
  }));

console.log(longParagraphs);

У цьому прикладі ми спочатку конвертуємо NodeList в масив пар ключ/значення за допомогою entries() та розподілення масиву. Потім ми використовуємо метод filter для вибору лише тих елементів, текстовий вміст яких перевищує 100 символів. Для кожного відфільтрованого елемента ми створюємо новий об'єкт з індексом та текстовим вмістом за допомогою методу map.

автор: Bond

Порада

Якщо ви працюєте з великими наборами даних або часто ітеруєте через NodeList, розгляньте можливість кешування результатів entries() у змінній. Це допоможе уникнути повторного обчислення ітератора під час кожної ітерації.

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

Пам'ятайте, що entries() повертає ітератор, а не масив. Якщо вам потрібно отримати масив індексів та елементів, використовуйте розподілення масиву або метод Array.from(). Наприклад:

const options = document.querySelectorAll('option');
const optionArray = Array.from(options.entries());
автор: Bond

Синтаксис

NodeList.entries()

Повернення

iterator

Повертає об'єкт ітератора, який містить пари [ключ, значення] для кожного елемента NodeList. Кожна пара містить індекс елемента та сам елемент.

автор: Bond

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
51 50 10 38 16
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
51 51 50 10
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

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

У цьому прикладі ми використовуємо метод entries() для ітерації через NodeList елементів <li> всередині елемента <ul>. Ми виводимо індекс та текстовий вміст кожного елемента списку в консоль.

HTML

<ul>
    <li>перший пункт</li>
    <li>другий пункт</li>
</ul>
<ul>
    <li>перший пункт</li>
    <li>другий пункт</li>
</ul>

JS

const list = document.querySelector('ul');
const listItems = list.querySelectorAll('li');

for (const [index, item] of listItems.entries()) {
  console.log(`Елемент ${index + 1}: ${item.textContent}`);
}
автор: Bond

У цьому прикладі ми використовуємо метод entries() разом із методами масивів filter та map для отримання масиву об'єктів, що містять інформацію про всі посилання (<a>) на веб-сторінці, які ведуть на зовнішні сайти. Ми фільтруємо посилання за допомогою регулярного виразу та створюємо новий масив об'єктів з інформацією про кожне зовнішнє посилання.

HTML

<a href="#demo">перше посилання</a>
<a href="#demo2">друге посилання</a>

JS

const links = document.querySelectorAll('a');
const externalLinks = [...links.entries()]
  .filter(([index, link]) => {
    // Регулярний вираз для перевірки зовнішніх посилань
    const externalPattern = /^https?:\/\/(?!www\.).*$/;
    return externalPattern.test(link.href);
  })
  .map(([index, link]) => ({
    index,
    href: link.href,
    text: link.textContent,
    target: link.target,
  }));

console.log(externalLinks);
автор: Bond

У цьому прикладі ми використовуємо метод entries() для ітерації через NodeList, що містить елементи <h2> та <p> всередині тега <header>. Ми відображаємо ці елементи у вигляді списку (<ul>).

автор: Bond

Коментарі

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

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

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

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

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