Как получить последние 5 элементов в массиве javascript, исключая первый элемент?

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 []
TIMEX
источник
1
Ваш пример - последние 3 элемента. Предоставьте немного больше вашей спецификации.
Джейсон МакКрири
1
ты всегда хочешь последние 5? или все, кроме первого, независимо от длины?
ShaneBlake
3
@ Джейсон: он хочет до пяти элементов.
SLaks
@ Джейсон, да, я хочу последние элементы (до 5)
TIMEX
3
Как и в моем ответе, который, вероятно, самый элегантный и самый короткий способ сделать этоarr.slice(1).slice(-5)
Belldandu

Ответы:

340

Вы можете позвонить:

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

Если вы не хотите исключать первый элемент, используйте

arr.slice(Math.max(arr.length - 5, 0))
SLaks
источник
8
+1 просто и полезно. Кроме того, я думаю, что последнее значение (1) должно быть 0, чтобы работать, Этот arr.slice (Math.max (arr.length - 5, 0)) работал для меня.
QMaster
@TuteC Нет, нет, он также возвращает первый элемент.
января
3
Или вы могли просто сделать цепочку, как в моем ответе arr.slice(1).slice(-5)>.>. также некоторые из вас не смогли прочитать заголовок, так как ОП хотел исключить первый результат из массива: |
Belldandu
21
не должно ли это быть arr.slice(Math.max(arr.length - 5, 0))?
user151496
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)

Belldandu
источник
29

Если вы используете lodash, его еще проще с takeRight .

_.takeRight(arr, 5);

hhsadiq
источник
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();
}
Arka
источник
2
Это работает только для конкретного примера пользователя. Это массивы с длиной 4.
Джейсон МакКрири
Нет, не совсем. Прекрасно работает с любой длиной массива. -3 указывает, что последние 3 элемента должны быть возвращены.
Арка
1
Позвольте мне перефразировать. Из комментариев, последних пяти элементов , вы возвращаете только последние 3. Какой пример. Не спец.
Джейсон МакКрири
1
-1 Суета связана с предоставлением правильного ответа. Хотя ваш ответ работает для возврата последних 3 элементов, он не работает для предоставления до последних 5 элементов, исключая первый элемент . Который был спецификацией ОП.
Джейсон МакКрири
1
Опять же, дело не в беспокойстве . Основная задача SO - предоставить ответы на конкретные вопросы пользователей. Ваш оригинальный ответ не сделал. На самом деле, ваше обновление все еще не соответствует спецификации.
Джейсон МакКрири
9

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

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

ты можешь сделать это!

Мадху Кумар
источник
5
Это то же самое, что: y.slice (- 5)
Dudi
1

ES6 способ:

Я использую назначение деструктуризации для массива, чтобы получить firstи оставшиеся restэлементы, а затем я возьму последние пять из метода 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]))
);

godblessstrawberry
источник