El método concates inmutable y consiste en crear un nuevo array a partir de la unión de otros valores o arrays especificados como argumentos.
Este método recibe uno o varios argumentos:
Valores cualesquiera y/o arrays para concatenar.
let result = array.concat(otherArray)
Diferencia entre la estructura for y el método concat
Si deseas utilizar una estructura for para concatenar arrays, debes copiar el primer arraysin su referencia en memoria para que no exista mutabilidad. Puedes realizar una copia con el spread operator (operador de propagación) o con el nuevo método structuredClone. También puedes utilizar el método push si no importa la mutabilidad del array original.
Con el método concat, solo debemos establecer el/los elemento/s a concatenar a un array de manera inmutable, es decir, los elementos originales no cambiarán.
Estaba preocupado porque la numeración de ejercicios de los archivos del profe iban un número más adelante que el mío y pensé que me había salteado una clase. Por suerte me di cuenta que en realidad el profe se saltó el número 8 😁
La sintaxis de propagación (...) (Spread) permite que un iterable, como una expresión de matriz o una cadena, se expanda en lugares donde se esperan cero o más argumentos (para llamadas a funciones) o elementos (para literales de matriz), o que se expanda una expresión de objeto en lugares donde se esperan cero o más pares clave-valor (para objetos literales).
Me parece importante destacar que concat no solo recibe arrays, tambien puede recibir los elementos a concatenar en el orden que se quiere, o un solo elemento, lo destaco porque un compañero uso concat para añadir un solo elemento no array y no estaba entendiendo.
[1,2,3].concat('hola')// returned value [1, 2, 3, 'hola' ]
for(let i = 0; i < array2.length; i++){
newArray.push(array2[i]);
}
console.log("FOR concatenar", newArray);
Pero estoy confundida del porqué sin el (... array) y con la asignación directa del array al arraynuevo se duplican los elementos del segundo array, entiendo lo de la referencia pero a la vez no capto porqué se lleva los elementos del 2do. 2 veces. Aquí me hubiera sido muy útil la prueba de escritorio para entenderlo mejor.
Una forma mas moderna de hacer una copia sin referencias de memoria puedes ocupar la función structuredClone(), puedes revisar la documentación oficial en este link
Es bueno que sepas que el problema de esa iteracion es que es un bucle dentr de otro bucle. Es O^2 en la notacion algoritmica de BIG O NOTATION. Ese algo no es tan bueno para el largo plazo!
El hecho de que concat separe los caracteres si le enviamos un string con spread operator, en realidad tiene sentido: porque un string técnicamente es un array de caracteres.
Solo hay que estar atentos de que al usar spread operator mandemos un array.
@lgfh Lo que dice Mozilla del método Slice:
El método slice() devuelve una copia de una parte del array dentro de un nuevo array empezando por inicio hasta fin (fin no incluido). El array original no se modificará.
const elements =[1,2,3,4];const otherElements =[5,6,7,8];elements.push(...otherElements);// con spread operatorconsole.log('Push con spread operator:', elements);//elements.push(otherElements); // sin spread operator //console.log('Push sin spread operator:', elements);