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.