Modificar elementos de un array

Los valores de un array pueden cambiarse sin más que asignar un nuevo valor al elemento señalado por su índice o posición. Es algo evidente.

Pero si se necesita cambiar más de un elemento o borrar grupos de items o sustituir valores, el objeto Array de Javascript proporciona algunos métodos que facilitan la tarea

  • fill ( valor [, desde [, hasta] ]), poner un valor fijo en varios elementos
  • copyWithin(donde, desde, hasta), copias internas de elementos.
  • splice(), insertar y/o extraer elementos  

El primero de estos métodos, fill(), permite cambiar todos o algunos elementos del array por un único valor. Si se quieren cambiar una parte del array se debe indicar la posición inicial y la final. Si no se pone la posición final el cambio se realiza hasta el final del Array. Si no se pone la posición inicial el cambio se hace desde el inicio. En este ejemplo tienes todas las opciones:

var dias = new Array(31);

var semanas = [1,2,3,4,5,6,7,8,9,10];

var meses = [1,2,3,4,5,6,7,8,9,10,11,12];

dias.fill('0');

semanas.fill(0, 4, 6);

meses.fill( 0, 8);

console.log(dias, semanas, meses)

El array dias se ha llenado con ceros. El array semana tiene ceros desde la posición 4 hasta la 6. Y el array meses tiene ceros desde la posición 8 hasta el final.

Por su parte el método copyWithin() lo que hace es mover elementos de una a otra parte del array. Modifica valores pero con valores ya existentes. Los argumentos del método son a partir de que índice se escribe, a partir de que índice se lee y donde se termina de leer.

En este ejemplo copiamos los 3 últimos valores desde la primera posición del array (recuerda que la primera posición es la 0).

var semanas = [1,2,3,4,5,6,7,1,1,1];

semanas.copyWithin ( 0, 7);

console.log(semanas);    //[1, 1, 1, 4, 5, 6, 7, 1, 1, 1]

En este ejemplo se indica el inicio y el final del segmento del array que se va a copiar (se copian las posiciones 3 y 4 )

var semanas = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];

semanas.copyWithin ( 0,3,5);

console.log( semanas)

Fíjate que el último elemento marca el fin de la copia, pero no se usa. Si no se indica su valor es la longitud del array.

Como ves si pruebas los ejemplos estos métodos modifican el array y también devuelven el array modificado, no una copia sino el mismo array.

Por último el método array.spline(ind, num, nuevos) con el que se puede extraer y añadir elementos a un array, e incluso borrar elementos. De esta forma se pueden sustituir elementos sin perderlos, pues el método devuelve los valores extraídos en un nuevo array.

El método usa al menos tres parámetros para indicar desde que elemento se va a modificar, el número de elementos a extaer y los elementos nuevos si los hay

Se entenderá mejor con unos ejemplos.

En el primero sustituyo el segundo elemento del array Manzana por Durazno y fresa, y guardo el elemento extraído.

var frutas = Array.of('pera', 'manzana', 'uva', 'melon');

var extraido;

extraido= frutas.splice(1,1,'durazno', 'fresa')

console.log(extraido); //["Manzana"]

console.log("Frutas: "+frutas);   //pera,durazno,fresa,uva,melon

Se ha sacado un elemento y se han metido dos. El array original cambia, tiene nuevos elementos y en el nuevo array se anotan los elementos extraídos.

Como ves se trata de una mezcla entre borrar elementos y añadir nuevos.

var frutas = Array.of('pera', 'manzana', 'uva', 'melon);

var extraido;

extraido= frutas.splice(1,2)

console.log(extraido);

console.log("Frutas: "+frutas)

En este ejemplo se han borrado dos elementos sin añadir nuevos.

Este borrado es un borrado verdadero, no deja las posiciones borradas vacías como hace el operador delete.