자바 스크립트 배열에서 첫 번째 요소를 제외하고 마지막 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
귀하의 예는 마지막 3 가지 요소입니다. 약간의 사양을 제공하십시오.
Jason McCreary 2016 년

1
항상 마지막 5 개를 원하십니까? 또는 길이에 관계없이 첫 번째를 제외한 모든 사람?
ShaneBlake 2016 년

3
@Jason : 그는 최대 5 개의 요소를 원합니다.
SLaks

@Jason, 예 마지막 요소를 원합니다 (최대 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))

8
+1 간단하고 유용합니다. 또한 마지막 값 (1)이 작동하려면 0이어야한다고 생각합니다.이 arr.slice (Math.max (arr.length-5, 0))은 저에게 효과적이었습니다.
QMaster

@TuteC 아니요, 첫 번째 요소도 반환합니다.
Jan

3
또는 내 답변 arr.slice(1).slice(-5)>.> 에서와 같이 체인 슬라이스를 수행했을 수 있습니다 . 또한 OP 중 일부가 배열의 첫 번째 결과를 제외하려고했기 때문에 일부 사용자가 제목을 읽지 못했습니다. |
Belldandu

21
해서는 안 arr.slice(Math.max(arr.length - 5, 0))됩니까?
user151496

7
"첫 번째 요소 제외"라는 질문에 마지막 값이 1아닌 이유가 0있습니다.
Don Cruickshank

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를 사용하는 것입니다 -브라우저에서 큰 자바 스크립트 축소 파일을로드하려고하지 않아도됩니다.

_.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 개의 요소가 반환되어야 함을 나타냅니다.
Arka

1
다시 말하겠습니다. 주석 에서 마지막 5 개 요소 중에서 마지막 3 개만 반환합니다. 예입니다. 사양이 아닙니다.
Jason McCreary 2016 년

1
-1 소란은 제공에 관한 올바른 답을. 귀하의 답변은 마지막 3 요소를 반환하는 데 효과적이지만 첫 번째 요소를 제외하고 마지막 5 요소까지 제공하는 것은 효과가 없습니다 . 어느 것이 OP의 사양이었습니다.
Jason McCreary 2016 년

1
다시 말하지만 걱정할 필요없습니다 . SO의 주요 요점은 특정 사용자 질문에 대한 답변을 제공하는 것입니다. 원래의 답변은 그렇지 않았습니다. 실제로 업데이트가 여전히 사양을 충족하지 않습니다.
Jason McCreary


1

ES6 방법 :

배열에 대한 소멸 할당 을 사용하여 요소 를 가져 와서 first남은 rest다음 restwith slice 메소드 중 마지막 5 개를 가져옵니다 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.