ในอาร์เรย์ 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 []

1
ตัวอย่างของคุณคือ 3 องค์ประกอบสุดท้าย ระบุข้อมูลจำเพาะของคุณอีกเล็กน้อย
Jason McCreary

1
คุณต้องการ 5 ครั้งสุดท้ายหรือไม่? หรือทุกคนยกเว้นคนแรกไม่ว่าจะยาวแค่ไหน
ShaneBlake

3
@ Jason: เขาต้องการองค์ประกอบมากถึงห้า
SLAK

@ 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 ไม่มันไม่ส่งคืนองค์ประกอบแรกด้วย
ม.ค.

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
Jason McCreary

ไม่ไม่ได้จริงๆ ทำงานได้ดีกับความยาวของอาร์เรย์ -3 หมายถึงว่าควรส่งคืนองค์ประกอบ 3 รายการสุดท้าย
Arka

1
ให้ฉันใช้ถ้อยคำใหม่ จากความคิดเห็นองค์ประกอบห้าตัวสุดท้ายคุณจะคืนค่า 3 อันสุดท้ายซึ่งเป็นตัวอย่าง ไม่ใช่สเป็ค
Jason McCreary

1
-1 ความยุ่งยากเกี่ยวกับการให้คำตอบที่ถูกต้อง ในขณะที่คำตอบของคุณทำงานสำหรับการกลับมาในช่วง 3 องค์ประกอบมันไม่ทำงานสำหรับการให้บริการถึงช่วง 5 องค์ประกอบไม่รวมองค์ประกอบแรก ซึ่งเป็นสเป็คของ OP
Jason McCreary

1
อีกครั้งก็ไม่ได้เกี่ยวกับความกังวล ประเด็นหลักของ SO คือการให้คำตอบสำหรับคำถามเฉพาะของผู้ใช้ คำตอบดั้งเดิมของคุณไม่ได้ ความจริงแล้วการอัพเดทของคุณยังไม่ตรงตามข้อกำหนด
Jason McCreary


1

วิธี ES6:

ฉันใช้destructuring มอบหมายอาร์เรย์เพื่อรับfirstและrestองค์ประกอบที่เหลือจากนั้นฉันจะใช้ห้าวิธีสุดท้ายrestด้วย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]))
);

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.