Bir javascript dizisinde, ilk öğe hariç son 5 öğeyi nasıl edinebilirim?


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

ek örnekler ekleme:

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

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

1
Örneğin son 3 öğedir. Şartnamenizden biraz daha fazlasını sağlayın.
Jason McCreary

1
her zaman son 5'i ister misin? ya da uzunluğu ne olursa olsun, birinciden başka herkes?
ShaneBlake

3
@ Jason: Beş elemente kadar istiyor.
SLaks

@Jason, evet Son elemanları istiyorum (5'e kadar)
TIMEX

3
Cevabımda olduğu gibi muhtemelen bunu yapmanın en zarif ve en kısa yoluarr.slice(1).slice(-5)
Belldandu

Yanıtlar:


340

Arayabilirsin:

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

İlk öğeyi hariç tutmak istemiyorsanız,

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

8
+1 basit ve kullanışlı. Ayrıca bence son değer (1) 0 çalışmak için olmalı, Bu arr.slice (Math.max (arr.length - 5, 0)) benim için çalıştı.
QMaster

@TuteC Hayır, ilk öğeyi de döndürür.
Ocak

3
Ya da cevabımdaki gibi bir zincir dilimi yapmış olabilirsiniz arr.slice(1).slice(-5). ayrıca OP dizinin ilk sonucunu dışlamak istediği gibi bazı başlığı okuyamadı: |
Belldandu

21
öyle değil mi arr.slice(Math.max(arr.length - 5, 0))?
user151496

7
Soru, "ilk öğeyi hariç tutma" durumunu belirtir, bu yüzden son değerdir 1ve değildir 0.
Don Cruickshank

70

İşte daha kısa gördüğüm bir tane

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

İstediğinizi yaptığının kanıtı için aşağıdaki kod snippet'ini çalıştırı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);

Bunu yapmanın başka bir yolu da lodash https://lodash.com/docs#rest kullanmak olacaktır - elbette tarayıcınızdan yapmaya çalışıyorsanız büyük bir javascript küçültülmüş dosya yüklemek zorunda kalmazsanız .

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


29

Lodash kullanıyorsanız, takeRight ile daha da basittir .

_.takeRight(arr, 5);


2
Dizinin 5'ten az elemanı olup olmadığına da dikkat edin
Devank

11

Bunu dene:

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
Bu yalnızca kullanıcının özel örneği için geçerlidir. Bu 4 uzunluğunda diziler.
Jason McCreary

Hayır gerçek değil. Dizinin herhangi bir uzunluğu ile iyi çalışır. -3, son 3 öğenin döndürülmesi gerektiğini belirtir.
Arka

1
Yeniden ifade edeyim. Yorumlar, son beş öğe , sadece son 3 döndürür. Bu örnek. Spec değil.
Jason McCreary

1
-1 Yaygara doğru cevabı vermekle ilgilidir . Cevabınız son 3 öğeyi döndürmek için çalışırken , ilk öğeyi hariç tutarak son 5 öğeyi sağlamak için çalışmaz . OP'nin özellikleri hangisiydi.
Jason McCreary

1
Yine, endişe ile ilgili değil . SO'nun ana noktası, belirli kullanıcı sorularına cevap vermektir. Orijinal cevabınız olmadı. Aslında, güncellemeniz hala teknik özellikleri karşılamıyor.
Jason McCreary

9

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

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

Bunu yapabilirsiniz!


5
Bu aynı: y.slice (- 5)
Dudi

1

ES6 yolu:

Ben öğeleri almak ve kalan dizi için yıkıcı atama kullanın ve sonra dilim yöntemi ile son beş alacağım :firstrestrest

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.