Wie erhalte ich in einem Javascript-Array die letzten 5 Elemente mit Ausnahme des ersten Elements?


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

Hinzufügen weiterer Beispiele:

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

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

1
Ihr Beispiel sind die letzten 3 Elemente. Geben Sie etwas mehr von Ihrer Spezifikation an.
— Jason McCreary

1
willst du immer die letzten 5? oder alle außer dem ersten, egal wie lang?
— ShaneBlake

3
@ Jason: Er will bis zu fünf Elemente.
— SLaks

@ Jason, ja, ich möchte die letzten Elemente (bis zu 5)
— TIMEX

3
Wie in meiner Antwort, die wahrscheinlich der eleganteste und kürzeste Weg istarr.slice(1).slice(-5)
— Belldandu

Antworten:


337

Du kannst anrufen:

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

Wenn Sie das erste Element nicht ausschließen möchten, verwenden Sie

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

8
+1 einfach und nützlich. Zusätzlich denke ich, dass der letzte Wert (1) 0 sein muss, um zu funktionieren. Diese arr.slice (Math.max (arr.length - 5, 0)) hat für mich funktioniert.
— QMaster

@TuteC Nein, das gibt es nicht, es gibt auch das erste Element zurück.
— Januar

3
Oder du hättest einfach eine Kettenscheibe machen können, wie in meiner Antwort arr.slice(1).slice(-5)>.>. Außerdem konnten einige von Ihnen den Titel nicht lesen, da das OP das erste Ergebnis des Arrays ausschließen wollte: |
— Belldandu

21
sollte es nicht sein arr.slice(Math.max(arr.length - 5, 0))?
— user151496

7
Die Frage lautet "das erste Element ausschließen", weshalb der letzte Wert ist 1und nicht 0.
— Don Cruickshank

68

Hier ist eine, die ich nicht gesehen habe und die noch kürzer ist

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

Führen Sie das folgende Code-Snippet aus, um zu beweisen, dass es das tut, was Sie wollen

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

Eine andere Möglichkeit wäre die Verwendung von lodash https://lodash.com/docs#rest - das ist natürlich dann der Fall , wenn es Ihnen nichts ausmacht, eine riesige, mit Javascript minimierte Datei zu laden, wenn Sie versuchen, dies über Ihren Browser zu tun.

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


29

Wenn Sie mit lodash, seine noch einfacher mit takeRight .

_.takeRight(arr, 5);


2
Es wird auch darauf geachtet, ob das Array weniger als 5 Elemente enthält
— Devank

11

Versuche dies:

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
Dies funktioniert nur für das spezifische Beispiel des Benutzers. Das sind Arrays mit einer Länge von 4.
— Jason McCreary

Nein nicht wirklich. Funktioniert gut mit jeder Länge des Arrays. Die -3 gibt an, dass die letzten 3 Elemente zurückgegeben werden sollen.
— Arka

1
Lassen Sie mich umformulieren. Aus den Kommentaren, den letzten fünf Elementen , geben Sie nur die letzten 3 zurück. Welches ist das Beispiel. Nicht die Spezifikation.
— Jason McCreary

1
-1 In der Aufregung geht es darum, die richtige Antwort zu geben. Während Ihre Antwort für die Rückgabe der letzten 3 Elemente funktioniert, funktioniert sie nicht für die Bereitstellung der bis zu den letzten 5 Elemente, mit Ausnahme des ersten Elements . Welches war die Spezifikation des OP.
— Jason McCreary

1
Auch hier geht es nicht um Sorgen . Der Hauptpunkt von SO besteht darin, Antworten auf bestimmte Benutzerfragen bereitzustellen. Ihre ursprüngliche Antwort hat nicht. Tatsächlich entspricht Ihr Update immer noch nicht den Spezifikationen.
— Jason McCreary

9

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

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

du kannst das!


5
Dies ist das gleiche wie: y.slice (- 5)
— Dudi

1

ES6 Weg:

Ich benutze Destrukturierung Zuordnung für Array zu erhalten firstund die verbleibenden restElemente und dann werde ich letzten fünf von der nehmen restmit Slice - Methode:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.