Novedades ES6

Array 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á.

El método slice (traducido al castellano: trozo) retorna un trozo del vector. slice no modifica el array original. Devuelve una copia plana (shallow copy) de los elementos especificados del array original. Los elementos del array original son copiados en el array devuelto de la siguiente manera

Para referencias de objeto ( no el objeto en sí ), slice copia la referencia dentro del nuevo array. Ambos, el array original y el nuevo, referencian al mismo objeto. Si un objeto referenciado cambia, los cambios son visibles para ambos arrays.

Para strings, numbers y boolean (no objetos String y Number), slice copia los valores en el nuevo array. Los cambios a los string, numbers y boolean en un array no afectan a los del otro array.

La sintaxis es:

slice([inicio [, fin]])

Parámetros

  • inicio Índice donde empieza la extracción. El primer elemento corresponde con el índice  0. Si el índice especificado es negativo, indica un desplazamiento desde el final del array. slice(-2)extrae los dos últimos elementos del array Si inicio es omitido el valor por defecto es 0. Si inicio es mayor a la longitud del array, se devuelve un array vacío.

  • fin Índice  que marca el final de la extracción. slice extrae hasta, pero sin incluir el final.  slice(1,4) extrae desde el segundo elemento hasta el cuarto  (los elementos con índices 1, 2,  y 3). Con un índice negativo, fin indica un desplazamiento desde el final de la secuencia. slice(2,-1) extrae desde el tercer hasta el penúltimo elemento en la secuencia. Si fin es omitido, slice extrae hasta el final de la secuencia (arr.length). Si fin es mayor a la longitud del array, slice extrae hasta el final de la secuencia (arr.length).

El método slice (traducido al castellano: trozo) retorna un trozo del vector. La sintaxis es:

vec.slice(2,4);

El primer parámetro indica a partir de que elementos debe retornar y el segundo parámetro hasta cual elemento (sin incluir dicha posición)
El método slice no modifica el vector original, sino que retorna otro vector con las componentes indicadas.

Veamos con un ejemplo el empleo del método slice:

<!DOCTYPE html>
<html>
<head>
<title>Ejemplo de JavaScript</title>
<meta charset="UTF-8">
</head>
<body>

<script>
var vec=[10,20,30,40,50,60];
document.write('Vector original<br>');
var f;
for(f=0;f<vec.length;f++)
{
document.write(vec[f]+'-');
}
document.write('<br>');
var vec2=vec.slice(1,4);
document.write('Vector resultante de la llamada a slice<br>');
for(f=0;f<vec2.length;f++)
{
document.write(vec2[f]+'-');
}
</script>

</body>
</html>

Estamos indicando en el método slice que retorne un nuevo vector a partir del elemento de la posición 1 hasta la posición 4 sin incluirla. El vector original (es decir vec) no se modifica con la llamada al método slice. El resultado de la ejecución de este programa es:

Vector original
10-20-30-40-50-60-
Vector resultante de la llamada a slice
20-30-40-

Otras variantes que podemos emplear con el método slice:

  • Si queremos extraer desde una determinada posición hasta el final del vector debemos llamar al método slice con un solo parámetro:
var vec=[10,20,30,40,50,60];
var vec2=vec.slice(2); // vec2 almacena [30,40,50,60]
  • Si queremos indicar una posición pero comenzando desde el final del vector debemos indicar un valor negativo en el primer parámetro:
var vec=[10,20,30,40,50,60];
var vec2=vec.slice(-2); // vec2 almacena [50,60]
  • También podemos indicar el segundo parámetro:
var vec=[10,20,30,40,50,60];
var vec2=vec.slice(-3,-1); // vec2 almacena [40,50]
  • Por último podemos indicar el primer parámetro un valor positivo y el segundo un valor negativo indicando una posición desde el final
var vec=[10,20,30,40,50,60];
var vec2=vec.slice(1,-1); // vec2 almacena [20,30,40,50]