W jaki sposób uzyskać w tablicy javascript ostatnie 5 elementów, z wyłączeniem pierwszego elementu?


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

dodając dodatkowe przykłady:

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

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

1
Twój przykład to ostatnie 3 elementy. Podaj trochę więcej swojej specyfikacji.
Jason McCreary

1
czy zawsze chcesz ostatnie 5? czy wszyscy oprócz pierwszego, bez względu na długość?
ShaneBlake

3
@Jason: Chce do pięciu elementów.
SLaks,

@Jason, tak, chcę ostatnie elementy (do 5)
TIMEX

3
Jak w mojej odpowiedzi, która jest prawdopodobnie najbardziej eleganckim i najkrótszym sposobem, aby to zrobićarr.slice(1).slice(-5)
Belldandu,

Odpowiedzi:


340

Możesz zadzwonić:

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

Jeśli nie chcesz wykluczyć pierwszego elementu, użyj

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

8
+1 proste i przydatne. Dodatkowo myślę, że ostatnia wartość (1) musi wynosić 0, aby działała, ta tablica.slice (Math.max (długość arr - 5, 0)) działała dla mnie.
QMaster

@TuteC Nie, nie zwraca, zwraca również pierwszy element.
stycznia

3
Albo mogłeś zrobić odcinek łańcucha jak w mojej odpowiedzi arr.slice(1).slice(-5)>.>. także niektórym z was nie udało się odczytać tytułu, ponieważ OP chciał wykluczyć pierwszy wynik z tablicy: |
Belldandu,

21
nie powinno być arr.slice(Math.max(arr.length - 5, 0))?
user151496,

7
Pytanie brzmi „wykluczając pierwszy element”, dlatego ostatnia wartość jest 1i nie 0.
Don Cruickshank

70

Oto jeden, którego nie widziałem, nawet krótszy

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

Uruchom poniższy fragment kodu, aby udowodnić, że robi to, co chcesz

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

Innym sposobem na to byłoby użycie lodash https://lodash.com/docs#rest - to oczywiście, jeśli nie masz nic przeciwko ładowaniu ogromnego zminimalizowanego pliku javascript, jeśli próbujesz to zrobić z przeglądarki.

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


29

Jeśli używasz lodash, jej jeszcze prostsze z takeRight .

_.takeRight(arr, 5);


2
Zadbaj również o to, czy tablica zawiera mniej niż 5 elementów
Devank

11

Spróbuj tego:

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
Działa to tylko w przypadku konkretnego użytkownika. To są tablice o długości 4.
Jason McCreary

Nie, nie bardzo. Działa dobrze z dowolną długością tablicy. Wartość -3 wskazuje, że ostatnie 3 elementy powinny zostać zwrócone.
Arka

1
Pozwól mi sformułować. Z komentarzy, ostatnich pięciu elementów , zwracasz tylko ostatnie 3. To jest przykład. Nie specyfikacja
Jason McCreary

1
-1 W zamieszaniu chodzi o udzielenie właściwej odpowiedzi. Chociaż twoja odpowiedź działa na zwrócenie ostatnich 3 elementów, nie działa na dostarczenie ostatnich 5 elementów, z wyłączeniem pierwszego elementu . Co było specyfikacją PO.
Jason McCreary

1
Znów nie chodzi o zmartwienie . Głównym celem SO jest udzielenie odpowiedzi na konkretne pytania użytkowników. Twoja pierwotna odpowiedź nie. W rzeczywistości aktualizacja nadal nie spełnia specyfikacji.
Jason McCreary,


1

Sposób ES6:

Używam przypisania destrukcyjnego dla tablicy, aby uzyskać firsti pozostałe restelementy, a następnie wezmę ostatnie pięć restz metodą 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]))
);

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.