Если я обычно использую цикл 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: я знаю, что это массив, разрушающий мой главный вопрос, почему????
Я копирую и вставляю два блока кода. Первый от MDN второй составитель движения так же старший код. console.info только для меня, который видит, что происходит...
Второй фрагмент кода — ерунда. Он не пройдет никакой серьезной проверки кода. Вы можете заменить for (const [, item] of splitwords.entries()) {
на for (const item of splitwords) {
Спасибо. Пожалуйста, проверьте мою ссылку, которая ведет вас к кодам текстовой анимации и ящику.
Это деструктивное задание.
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(""));
}
Возможно, они готовились к будущему, на случай, если когда-нибудь индекс станет важным.
Второй фрагмент кода не имеет смысла. Вы можете просто перебирать массив.
entries
преобразует каждый элемент массива в массив, содержащий индекс и элемент.[, item]
отбрасывает индекс.entries
бесполезен в этом коде.