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 []
TIMEX
quelle
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))
SLaks
quelle
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)

Belldandu
quelle
29

Wenn Sie mit lodash, seine noch einfacher mit takeRight .

_.takeRight(arr, 5);

hhsadiq
quelle
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();
}
Arka
quelle
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!

Madhu Kumar
quelle
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]))
);

Godblessstrawberry
quelle