Trong một mảng javascript, làm cách nào tôi có được 5 phần tử cuối cùng, ngoại trừ phần tử đầu tiên?


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

thêm ví dụ:

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

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

1
Ví dụ của bạn là 3 yếu tố cuối cùng. Cung cấp thêm một chút đặc điểm kỹ thuật của bạn.
Jason McCreary

1
bạn luôn muốn 5 cuối cùng? hoặc tất cả mọi người nhưng đầu tiên, không có vấn đề chiều dài?
ShaneBlake

3
@Jason: Anh ấy muốn tới năm yếu tố.
SLaks

@Jason, vâng tôi muốn các yếu tố cuối cùng (tối đa 5)
TIMEX

3
Như trong câu trả lời của tôi, đó có lẽ là cách thanh lịch và ngắn gọn nhất để làm điều đóarr.slice(1).slice(-5)
Belldandu

Câu trả lời:


337

Bạn có thể gọi:

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

Nếu bạn không muốn loại trừ yếu tố đầu tiên, hãy sử dụng

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

8
+1 đơn giản và hữu ích. Ngoài ra, tôi nghĩ rằng giá trị cuối cùng (1) phải là 0 để hoạt động, mảng này.slice (Math.max (Array.length - 5, 0)) hoạt động với tôi.
QMaster

@TuteC Không, không, nó cũng trả về phần tử đầu tiên.
tháng 1,

3
Hoặc bạn có thể vừa thực hiện một lát cắt chuỗi như trong câu trả lời của tôi arr.slice(1).slice(-5)>.>. cũng có một số bạn không đọc được tiêu đề vì OP muốn loại trừ kết quả đầu tiên của mảng: |
Belldandu

21
không nên nó được arr.slice(Math.max(arr.length - 5, 0))?
dùng151496

7
Câu hỏi nêu rõ "không bao gồm phần tử đầu tiên", đó là lý do tại sao giá trị cuối cùng 1và không 0.
Don Cruickshank

68

Đây là một cái tôi chưa từng thấy thậm chí còn ngắn hơn

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

Chạy đoạn mã dưới đây để chứng minh nó làm những gì bạn muốn

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

Một cách khác để làm điều đó là sử dụng lodash https://lodash.com/docs#rest - đó là điều tất nhiên nếu bạn không phải tải một tệp rút gọn javascript lớn nếu bạn cố gắng làm điều đó từ trình duyệt của mình.

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


29

Nếu bạn đang sử dụng lodash, nó thậm chí còn đơn giản hơn với TakeRight .

_.takeRight(arr, 5);


2
Nó cũng quan tâm nếu mảng có ít hơn 5 phần tử
Devank

11

Thử cái này:

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
Điều này chỉ hoạt động cho ví dụ cụ thể của người dùng. Đó là mảng có độ dài 4.
Jason McCreary

Không thật sự lắm. Hoạt động tốt với bất kỳ chiều dài của mảng. -3 chỉ ra rằng 3 phần tử cuối cùng sẽ được trả về.
Arka

1
Hãy để tôi nói lại. Từ các bình luận, năm yếu tố cuối cùng , bạn chỉ trả về 3. cuối cùng là ví dụ. Không phải thông số kỹ thuật.
Jason McCreary

1
-1 Sự ồn ào là về việc cung cấp câu trả lời đúng . Mặc dù câu trả lời của bạn hoạt động để trả về 3 phần tử cuối cùng nhưng nó không hoạt động để cung cấp tối đa 5 phần tử cuối cùng, ngoại trừ phần tử đầu tiên . Đó là thông số kỹ thuật của OP.
Jason McCreary

1
Một lần nữa, nó không phải là lo lắng . Điểm chính của SO là cung cấp câu trả lời cho các câu hỏi cụ thể của người dùng. Câu trả lời ban đầu của bạn thì không. Trong thực tế, bản cập nhật của bạn vẫn không đáp ứng được thông số kỹ thuật.
Jason McCreary

9

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

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

bạn có thể làm được việc này!


5
Điều này giống như: y.slice (- 5)
Dudi

1

Cách ES6:

Tôi sử dụng phép gán hủy cho mảng để lấy firstrestcác phần tử còn lại và sau đó tôi sẽ thực hiện năm phương thức cuối cùng restvới phương thức lát :

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.