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 Microsoft Internet Explorer
51 50 10 38 16
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
51 51 50 10

Приклади

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

У цьому прикладі ми використовуємо метод 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

Коментарі

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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