In un array javascript, come posso ottenere gli ultimi 5 elementi, escluso il primo elemento?


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

aggiungendo altri esempi:

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

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

1
Il tuo esempio sono gli ultimi 3 elementi. Fornisci un po 'di più delle tue specifiche.
Jason McCreary,

1
vuoi sempre gli ultimi 5? o tutti tranne il primo, non importa la lunghezza?
ShaneBlake,

3
@Jason: vuole fino a cinque elementi.
SLaks,

@Jason, sì, voglio gli ultimi elementi (fino a 5)
TIMEX,

3
Come nella mia risposta, che è probabilmente il modo più elegante e più breve per farloarr.slice(1).slice(-5)
Belldandu,

Risposte:


340

Puoi chiamare:

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

Se non si desidera escludere il primo elemento, utilizzare

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

8
+1 semplice e utile. Inoltre, penso che l'ultimo valore (1) debba essere 0 per funzionare, This arr.slice (Math.max (arr.length - 5, 0)) ha funzionato per me.
Q Master

@TuteC No, non restituisce anche il primo elemento.
Jan

3
Oppure avresti potuto fare una fetta di catena come nella mia risposta arr.slice(1).slice(-5)>.>. inoltre alcuni di voi non sono riusciti a leggere il titolo poiché l'OP ha voluto escludere il primo risultato dell'array: |
Belldandu,

21
non dovrebbe essere arr.slice(Math.max(arr.length - 5, 0))?
user151496

7
La domanda afferma "escludendo il primo elemento", motivo per cui l'ultimo valore è 1e non 0.
Don Cruickshank,

70

Eccone uno che non ho visto, che è ancora più breve

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

Esegui lo snippet di codice di seguito per provare che fa quello che vuoi

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);

Un altro modo per farlo sarebbe usare lodash https://lodash.com/docs#rest - questo è ovviamente se non ti dispiace dover caricare un enorme file minimizzato javascript se stai provando a farlo dal tuo browser.

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


29

Se stai usando lodash, è ancora più semplice con takeRight .

_.takeRight(arr, 5);


2
Si preoccupa anche se l'array ha meno di 5 elementi
Devank,

11

Prova questo:

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
Questo funziona solo per l'esempio specifico dell'utente. Si tratta di array con una lunghezza di 4.
Jason McCreary,

No, non proprio. Funziona bene con qualsiasi lunghezza di array. -3 indica che devono essere restituiti gli ultimi 3 elementi.
Arka,

1
Lasciami riformulare. Dai commenti, gli ultimi cinque elementi , si restituiscono solo gli ultimi 3. Qual è l'esempio. Non le specifiche.
Jason McCreary,

1
-1 Il polverone consiste nel fornire la risposta giusta . Mentre la tua risposta funziona per restituire gli ultimi 3 elementi, non funziona per fornire fino agli ultimi 5 elementi, escluso il primo elemento . Qual era la specifica del PO.
Jason McCreary,

1
Ancora una volta, non si tratta di preoccupazione . Il punto principale di SO è fornire risposte a domande specifiche dell'utente. La tua risposta originale no. In realtà, l'aggiornamento non soddisfa ancora le specifiche.
Jason McCreary,

9

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

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

Puoi farlo!


5
Questo è lo stesso di: y.slice (- 5)
Dudi

1

Modo ES6:

Uso l' assegnazione destrutturante per l'array per ottenere firste gli restelementi rimanenti e quindi prenderò gli ultimi cinque del metodo restwith slice :

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]))
);

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.