Como vimos en otro post, Paso por Valor Paso por Referencia, los elementos que no son tipos primitivos, al igualarlos a otros, se pasa la referencia.
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = equipo2; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);
¿Entonces como hacemos para copiar solamente el valor de un Array a otro en Javascript?
Método 1: Slice()
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = equipo2.slice(); console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);
Método 2: Creando un nuevo array y concatenando el viejo en el.
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = [].concat(equipo2); console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);
Método 3: La nueva forma de ES6 con el operador Spread:
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = [...equipo2]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);
Método 4: Con Array.from:
var equipo1 = ["a","b","c"]; var equipo2 = ["d","e","f"]; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1 = Array.from(equipo2); console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2); equipo1[0] = "X"; console.log("Equipo1:",equipo1,"\nEquipo2:",equipo2);