Aprendizaje de la asignación de desestructuración en Javascript y cuando se intenta tener una matriz en la desestructuración de objetos, solo la primera letra regresa a la consola, ¿por qué sucede?
function splitter(name) { const [fName, lName] = name.split(" "); return { fName, lName }; } const {fName: [firstWord],lName} = splitter("John Doe"); console.log(splitter("John Doe")); console.log({fName: [firstWord],lName}); console.log(firstWord); console.log(lName);Primero tomemos el caso simple, donde solo está desestructurando la matriz
function splitter(name) { const [fName, lName] = name.split(' '); return { fName, lName }; } const { fName, lName } = splitter('John Doe'); console.log(fName); // JohnRecuerde que las
stringsson iterables en JS
const str = 'John'; for (let c of str) { // For-of can only be used in iterables console.log(c); }Así que cuando lo hagas
const { fName: [firstWord], lName } = splitter('John Doe'); entonces esto significa que también está desestructurando la cadena fName , lo que dará como resultado el firstChar como
Entonces, el 👆 anterior es exactamente igual que:
const { fName, lName } = splitter('John Doe'); const [firstChar] = fName; console.log(firstChar); function splitter(name) { const [fName, lName] = name.split(' '); return { fName, lName }; } const { fName, lName } = splitter('John Doe'); const [firstChar] = fName; console.log(firstChar);Esto sucede porque splitter te devuelve fName y lName , cada uno de ellos es una palabra, una cadena, que es una matriz de caracteres.
Cuando reestructura fName a una matriz, le da la primera letra de la matriz.
Si agregará más argumentos a la matriz, obtendrá el resto de las letras.
Para solucionar su problema, simplemente no lo reestructure en una matriz.
function splitter(name) { const [fName, lName] = name.split(" "); return { fName, lName }; } const {fName: [ch1,ch2,ch3,ch4],lName} = splitter("John Doe"); console.log({fName: [ch1,ch2,ch3,ch4],lName}); const {fName: [char1, ...restOfChars]} = splitter("John Doe"); console.log(char1); console.log(restOfChars); const {fName: wholeWord} = splitter("John Doe"); console.log(wholeWord);