Что означает прочерк в массиве при переборе массива в цикле for с итератором записей?

Если я обычно использую цикл for of и использую итератор в качестве записей, ситуация выглядит так:

var a = ['a', 'b', 'c'];
var iterator = a.entries();

for (let e of iterator) {
  console.info(e);
}
// [0, 'a']
// [1, 'b']
// [2, 'c']

итератор: будет весь массив, содержащий все пары ключ/значение элементов. Ключ будет индексом.

e: будет элементом массива

НО что это??????

let text = "A A A";
let splitwords = text.split(" ");
let words = [];
for (const [, item] of splitwords.entries()) {
  words.push(item.split(""));
}

console.info(`This is the words: ${words}`);

что означает часть [, вещь]???

и почему я должен использовать этот шаблон?

text.split("") делает то же самое или нет?

(В противном случае я пытаюсь решить проблему с текстовой анимацией, и это наследуется от этого кода:

Текстовая анимация )

Спасибо

PS: я знаю, что это массив, разрушающий мой главный вопрос, почему????

Второй фрагмент кода не имеет смысла. Вы можете просто перебирать массив. entries преобразует каждый элемент массива в массив, содержащий индекс и элемент. [, item] отбрасывает индекс. entries бесполезен в этом коде.

jabaa 20.03.2022 19:11

Я копирую и вставляю два блока кода. Первый от MDN второй составитель движения так же старший код. console.info только для меня, который видит, что происходит...

Milán Nikolics 20.03.2022 19:14

Второй фрагмент кода — ерунда. Он не пройдет никакой серьезной проверки кода. Вы можете заменить for (const [, item] of splitwords.entries()) { на for (const item of splitwords) {

jabaa 20.03.2022 19:15

Спасибо. Пожалуйста, проверьте мою ссылку, которая ведет вас к кодам текстовой анимации и ящику.

Milán Nikolics 20.03.2022 19:17
«PS: я знаю, что это массив, разрушающий мой главный вопрос, почему????» Это плохой код. Нет смысла писать такой код. Это не нужно сбивать с толку, и это не нужно дольше.
jabaa 20.03.2022 19:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
52
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Это деструктивное задание.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

Array.prototype.entries() возвращает массив из 2 элементов для индекса и сам элемент для каждого элемента массива.

Таким образом, в этом выражении индекс ничему не присваивается (поскольку перед запятой не объявлена ​​переменная), а элемент присваивается item.

Пример

const ar = [1,2]
const [,value2]=ar
console.info(value2)
const [value1,]=ar
console.info(value1)

const [v1, v2] = ar
console.info(v1, v2)

Для item.split("") это просто кажется бесполезным, результат будет таким же в данном случае только с words.push(item), поскольку каждое слово - это всего лишь одна буква... Если бы слова состояли из более чем одной буквы, это просто сохранило бы каждую букву отдельно в массиве words . Который можно было бы назвать letters Наверное...

Редактировать: на вопрос «зачем использовать этот шаблон». В данном случае это снова кажется бесполезным. Индекс не используется, поэтому вызов entries кажется неуместным.

Это просто способ пропустить деструктурирование первого элемента в массиве. Вы в основном говорите, что вас не интересует первый элемент массива. Поскольку метод entries() возвращает новый объект Array Iterator, который содержит пары ключ/значение для каждого индекса в массиве.

const foo = ['a', 'b', 'c'];

for (const [, item] of foo.entries()) {
  // item would be 'a', 'b', 'c'
}

for (const [index, item] of foo.entries()) {
  // item would be 'a', 'b', 'c'
  // index would be 0, 1, 2
}
Ответ принят как подходящий
for (const [, item] of splitwords.entries()) {
  words.push(item.split(""));
}

[, item] называется разрушение массива, и причина этого в том, что записи в splitwords.entries(). Результат этого массива такой [0, "a"],[1, "b"] (первый элемент — это индекс, а второй элемент — значение), но в этом случае они не используют индекс, поэтому объявление похоже на [,item] (если они хотят использовать это, код может быть [index, item]).

Без использования индекса они могут реализовать этот способ

for (const item of splitwords) { //remove entries and array destructing
  words.push(item.split(""));
}

and why should I use this pattern?

Что ж, я думаю, что это просто их стиль кода для использования for of для сбора индекса и значения вместе. Это зависит от того, нужен ли вам индекс или нет.

words.push(item.split("")) отличается от приведенного выше случая, они пытаются превратить все слово "Hello" в символы ["H","e","l","l","o"] для анимации, поэтому окончательный результат words может быть

[
  ["F","r","a","m","e"],
  ["M","o","t","i","o","n"],
  ...
]

Я не знаю, следует ли вам использовать этот шаблон, но если вы хотите объяснить, что это такое, это как

for(let temp of splitwords.entries()){
  const [, item] = temp; 
  words.push(item.split('');
}

И тогда const [, item] = temp; в основном то же самое, что и const item = temp[1].

Из-за того, как «.entries ()» работает для массива (давая [индекс, значение]), поскольку индекс игнорируется при деструктуризации, результирующее item является просто значением. Итак, я не думаю, что результат отличается от следующего:

for (const item of splitwords) {
  words.push(item.split(""));
}

Возможно, они готовились к будущему, на случай, если когда-нибудь индекс станет важным.

Другие вопросы по теме