Як у масиві javascript я можу отримати останні 5 елементів, виключаючи перший елемент?


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

додавання додаткових прикладів:

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

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

1
Ваш приклад - останні три елементи. Надайте трохи більше своїх специфікацій.
Jason McCreary

1
ви завжди хочете останні 5? або всі, але перше, незалежно від довжини?
ShaneBlake

3
@Jason: Він хоче до п'яти елементів.
СЛАкс

@Jason, так, я хочу останні елементи (до 5)
TIMEX

3
Як у моїй відповіді, який, мабуть, найелегантніший і найкоротший спосіб зробити цеarr.slice(1).slice(-5)
Беллданду

Відповіді:


340

Ви можете зателефонувати:

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

Якщо ви не хочете виключати перший елемент, використовуйте

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

8
+1 простий і корисний. Крім того, я думаю, що останнє значення (1) повинно бути 0 для роботи, ця arr.slice (Math.max (arr.length - 5, 0)) працювала для мене.
QMaster

@TuteC Ні, це не, він також повертає перший елемент.
січня

3
Або ви могли просто зробити ланцюжок, як у моїй відповіді arr.slice(1).slice(-5)>.>. також деякі з вас не змогли прочитати заголовок, оскільки ОП хотів виключити перший результат масиву: |
Беллданду

21
чи не повинно бути arr.slice(Math.max(arr.length - 5, 0))?
користувач151496

7
Питання зазначає "виключаючи перший елемент", тому останнє значення є, 1а не 0.
Дон Круїшак

70

Ось я не бачив, що ще коротше

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

Запустіть фрагмент коду нижче для підтвердження того, що він робить те, що ви хочете

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

Ще один спосіб зробити це - використання lodash https://lodash.com/docs#rest - це, звичайно, якщо ви не заперечуєте перед завантаженням величезного мінімізованого файлу javascript, якщо ви намагаєтеся зробити це з вашого браузера.

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


29

Якщо ви використовуєте lodash, його ще простіше з takeRight .

_.takeRight(arr, 5);


2
Він також подбає про те, якщо в масиві менше 5 елементів
Devank

11

Спробуйте це:

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
Це працює лише для конкретного прикладу користувача. Це масиви довжиною 4.
Джейсон МакКері,

Ні, не дуже. Добре працює з будь-якою довжиною масиву. -3 вказує на те, що останні 3 елементи слід повернути.
Арка

1
Дозвольте перефразувати. З коментарів, останніх п’яти елементів , ви повертаєте лише останні 3. Що є прикладом. Не специфікація.
Джейсон МакКрірі

1
-1 Суєта з приводу надання правильної відповіді. Хоча ваша відповідь працює для повернення останніх трьох елементів, вона не працює для надання до 5 останніх елементів, виключаючи перший елемент . Що було специфікацією ОП.
Джейсон МакКрірі

1
Знову ж таки, справа не в турботі . Основний пункт ТА - надання відповідей на конкретні запитання користувачів. Ваша оригінальна відповідь не відповіла. Насправді ваше оновлення все ще не відповідає специфікації.
Jason McCreary


1

ES6 спосіб:

Я використовую завдання деструструктури для масиву, щоб отримати firstта залишкові restелементи, а потім візьму останні п’ять методу restз фрагментом :

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.