Si normalmente uso for of loop y uso iterator como entradas, esa situación se ve así:
var a = ['a', 'b', 'c']; var iterator = a.entries(); for (let e of iterator) { console.log(e); } // [0, 'a'] // [1, 'b'] // [2, 'c']iterador: será la matriz completa que contiene todos los elementos par clave/valor. La clave será el índice.
e: será un elemento en la matriz
¿¿¿¿¿¿Pero qué es esto??????
let text = "AA A"; let splitwords = text.split(" "); let words = []; for (const [, item] of splitwords.entries()) { words.push(item.split("")); } console.log(`This is the words: ${words}`);¿Qué significa la parte [, artículo] ?
y ¿por qué debo usar este patrón?
text.split("") ¿hace exactamente lo mismo o no?
(De lo contrario, trato de resolver un problema de animación de texto y esto se hereda de ese código:
animación de texto en movimiento del enmarcador )
Gracias
PD: Sé que esta es una matriz que destruye mi pregunta principal, ¿por qué?
Esta es una tarea de desestructuración.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
Array.prototype.entries() devuelve una matriz de 2 elementos para el índice y el elemento en sí para cada elemento de la matriz.
Entonces, en esta expresión, el índice no se asigna a nada (porque no hay una variable declarada antes de la coma) y el elemento se asigna al item .
Ejemplo
const ar = [1,2] const [,value2]=ar console.log(value2) const [value1,]=ar console.log(value1) const [v1, v2] = ar console.log(v1, v2) Para item.split("") parece inútil, el resultado sería el mismo en el presente caso con solo words.push(item) ya que cada palabra es solo una letra... Si las palabras fueran más de una letra esto solo almacenaría cada letra por separado en la matriz de words . Que tal vez podrían llamarse letters , supongo...
Editar: para la pregunta "por qué usar este patrón". En el presente caso, nuevamente parece inútil. El índice no se usa, por lo que llamar a entries simplemente no parece relevante.
Es solo una forma de omitir la desestructuración del primer elemento de la matriz. Básicamente, está diciendo que no está interesado en el primer elemento de la matriz. Dado que el entries() devuelve un nuevo objeto Array Iterator que contiene los pares clave/valor para cada índice de la matriz.
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] se llama destrucción de matriz , y la razón de esto es debido a las entradas en splitwords.entries() . El resultado de esa matriz es así [0, "a"],[1, "b"] (el primer elemento es un índice y el segundo elemento es un valor), pero en este caso, no usan un index, por lo que la declaración es como [,item] (si quieren usarla, el código puede ser [index, item] ).
Sin usar un índice, pueden implementar de esta manera
for (const item of splitwords) { //remove entries and array destructing words.push(item.split("")); }y ¿por qué debo usar este patrón?
Bueno, creo que este es solo su estilo de código para usar for of recopilar índice y valor juntos. Depende de si necesita un índice o no.
words.push(item.split("")) es diferente del caso anterior, intentan convertir la palabra completa "Hello" en caracteres ["H","e","l","l","o"] para la animación, por lo que el resultado final de las words puede ser
[ ["F","r","a","m","e"], ["M","o","t","i","o","n"], ... ]