Dalam array javascript, bagaimana cara mendapatkan 5 elemen terakhir, tidak termasuk elemen pertama?

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

menambahkan contoh tambahan:

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

[1] // ...would return []
TIMEX
sumber
1
Contoh Anda adalah 3 elemen terakhir. Berikan sedikit spesifikasi Anda.
Jason McCreary
1
apakah kamu selalu menginginkan 5 yang terakhir? atau semua orang kecuali yang pertama, tidak peduli panjangnya?
ShaneBlake
3
@Jason: Dia ingin hingga lima elemen.
SLaks
@Jason, ya saya ingin elemen terakhir (hingga 5)
TIMEX
3
Seperti dalam jawaban saya yang mungkin merupakan cara paling elegan dan terpendek untuk melakukannyaarr.slice(1).slice(-5)
Belldandu

Jawaban:

337

Anda bisa menelepon:

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

Jika Anda tidak ingin mengecualikan elemen pertama, gunakan

arr.slice(Math.max(arr.length - 5, 0))
Slaks
sumber
8
+1 sederhana dan bermanfaat. Selain itu saya pikir nilai terakhir (1) harus 0 untuk bekerja, arr.slice ini (Math.max (arr.length - 5, 0)) bekerja untuk saya.
QMaster
@TuteC Tidak, itu mengembalikan elemen pertama juga.
Jan
3
Atau Anda bisa saja melakukan irisan rantai seperti pada jawaban saya arr.slice(1).slice(-5)>.>. juga beberapa dari Anda gagal membaca judul karena OP ingin mengecualikan hasil pertama array: |
Belldandu
21
bukankah seharusnya begitu arr.slice(Math.max(arr.length - 5, 0))?
user151496
7
Pertanyaannya menyatakan "tidak termasuk elemen pertama" yang mengapa nilai terakhir adalah 1dan tidak 0.
Don Cruickshank
68

Ini salah satu yang belum pernah saya lihat yang bahkan lebih pendek

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

Jalankan cuplikan kode di bawah ini sebagai bukti melakukan apa yang Anda inginkan

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

Cara lain untuk melakukannya adalah menggunakan lodash https://lodash.com/docs#rest - yang tentu saja jika Anda tidak keberatan harus memuat file kecil javascript yang diperkecil jika Anda mencoba melakukannya dari browser Anda.

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

Belldandu
sumber
29

Jika Anda menggunakan lodash, ini bahkan lebih mudah dengan takeRight .

_.takeRight(arr, 5);

hhsadiq
sumber
2
Ini juga menangani jika array memiliki kurang dari 5 elemen
Devank
11

Coba ini:

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
sumber
2
Ini hanya berfungsi untuk contoh spesifik pengguna. Itu adalah array dengan panjang 4.
Jason McCreary
Tidak terlalu. Berfungsi baik dengan panjang array apa pun. -3 menunjukkan bahwa 3 elemen terakhir harus dikembalikan.
Arka
1
Biarkan saya ulangi. Dari komentar, lima elemen terakhir , Anda hanya mengembalikan 3. Yang terakhir adalah contoh. Bukan spec.
Jason McCreary
1
-1 Repotnya adalah tentang memberikan jawaban yang benar . Sementara jawaban Anda berfungsi untuk mengembalikan 3 elemen terakhir, itu tidak berfungsi untuk menyediakan hingga 5 elemen terakhir, tidak termasuk elemen pertama . Yang merupakan spesifikasi OP.
Jason McCreary
1
Sekali lagi, ini bukan tentang khawatir . Poin utama SO adalah untuk memberikan jawaban atas pertanyaan pengguna tertentu. Jawaban asli Anda tidak. Bahkan, pembaruan Anda masih belum memenuhi spesifikasi.
Jason McCreary
9

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

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

kamu bisa melakukan ini!

Madhu Kumar
sumber
5
Ini sama dengan: y.slice (- 5)
Dudi
1

Cara ES6:

Saya menggunakan penugasan untuk array array untuk mendapatkan firstdan restelemen yang tersisa dan kemudian saya akan mengambil lima terakhir restdengan metode 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
sumber