En una matriz de JavaScript, ¿cómo obtengo los últimos 5 elementos, excluyendo el primer elemento?


197
[1, 55, 77, 88] // ...would return [55, 77, 88]

agregando ejemplos adicionales:

[1, 55, 77, 88, 99, 22, 33, 44] // ...would return [88, 99, 22, 33, 44]

[1] // ...would return []

1
Su ejemplo son los últimos 3 elementos. Proporcione un poco más de su especificación.
— Jason McCreary

1
¿Siempre quieres los últimos 5? o todos menos el primero, sin importar la longitud?
— ShaneBlake

3
@ Jason: quiere hasta cinco elementos.
— SLaks

@ Jason, sí, quiero los últimos elementos (hasta 5)
— TIMEX

3
Como en mi respuesta, que es probablemente la forma más elegante y más corta de hacerloarr.slice(1).slice(-5)
— Belldandu

Respuestas:


338

Puedes llamar:

arr.slice(Math.max(arr.length - 5, 1))

Si no desea excluir el primer elemento, use

arr.slice(Math.max(arr.length - 5, 0))

8
+1 simple y útil. Además, creo que el último valor (1) debe ser 0 para que funcione. Este arr.slice (Math.max (arr.length - 5, 0)) funcionó para mí.
— QMaster

@TuteC No, no lo hace, también devuelve el primer elemento.
— ene

3
O podrías haber hecho un corte de cadena como en mi respuesta arr.slice(1).slice(-5)>.>. también algunos de ustedes no pudieron leer el título ya que el OP quería excluir el primer resultado de la matriz: |
— Belldandu

21
no debería ser arr.slice(Math.max(arr.length - 5, 0))?
— user151496

77
La pregunta establece "excluir el primer elemento", razón por la cual el último valor es 1y no 0.
— Don Cruickshank

68

Aquí hay uno que no he visto que es aún más corto

arr.slice(1).slice(-5)

Ejecute el fragmento de código a continuación para probar que hace lo que desea

var arr1 = [0, 1, 2, 3, 4, 5, 6, 7],
  arr2 = [0, 1, 2, 3];

document.body.innerHTML = 'ARRAY 1: ' + arr1.slice(1).slice(-5) + '<br/>ARRAY 2: ' + arr2.slice(1).slice(-5);

Otra forma de hacerlo sería usar lodash https://lodash.com/docs#rest , eso es, por supuesto, si no le importa tener que cargar un enorme archivo minificado de JavaScript si está intentando hacerlo desde su navegador.

_.slice(_.rest(arr), -5)


29

Si está usando lodash, es aún más simple con takeRight .

_.takeRight(arr, 5);


2
También se ocupa de si la matriz tiene menos de 5 elementos
— Devank

11

Prueba esto:

var array = [1, 55, 77, 88, 76, 59];
var array_last_five;
array_last_five = array.slice(-5);
if (array.length < 6) {
     array_last_five.shift();
}

2
Esto solo funciona para el ejemplo específico del usuario. Eso es matrices con una longitud de 4.
— Jason McCreary

No en realidad no. Funciona bien con cualquier longitud de matriz. El -3 indica que los últimos 3 elementos deben ser devueltos.
— Arka

1
Déjame reformular. De los comentarios, los últimos cinco elementos , solo devuelve los últimos 3. Cuál es el ejemplo. No es la especificación.
— Jason McCreary

1
-1 El alboroto consiste en proporcionar la respuesta correcta . Si bien su respuesta funciona para devolver los últimos 3 elementos, no funciona para proporcionar hasta los últimos 5 elementos, excluyendo el primer elemento . Cuál era la especificación del OP.
— Jason McCreary

1
De nuevo, no se trata de preocuparse . El punto principal de SO es proporcionar respuestas a preguntas específicas de los usuarios. Su respuesta original no lo hizo. De hecho, su actualización aún no cumple con las especificaciones.
— Jason McCreary

9

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

console.log(y.slice((y.length - 5), y.length))

¡Puedes hacerlo!


55
Esto es lo mismo que: y.slice (- 5)
— Dudi

1

Manera ES6:

Utilizo la asignación de desestructuración para la matriz para obtener firsty los restelementos restantes y luego tomaré los últimos cinco restcon el método de división :

const cutOffFirstAndLastFive = (array) => {
  const [first, ...rest] = array;
  return rest.slice(-5);
}

cutOffFirstAndLastFive([1, 55, 77, 88]);

console.log(
  'Tests:',
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88])),
  JSON.stringify(cutOffFirstAndLastFive([1, 55, 77, 88, 99, 22, 33, 44])),
  JSON.stringify(cutOffFirstAndLastFive([1]))
);

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.