จับสำหรับการทำซ้ำครั้งสุดท้ายแต่ละครั้ง


คำตอบ:


179

คำตอบที่อัปเดตสำหรับ ES6 + เป็นที่นี่


arr = [1, 2, 3]; 

arr.forEach(function(i, idx, array){
   if (idx === array.length - 1){ 
       console.log("Last callback call at index " + idx + " with value " + i ); 
   }
});

จะส่งออก:

Last callback call at index 2 with value 3

วิธีการทำงานนี้คือการทดสอบarr.lengthกับดัชนีปัจจุบันของอาร์เรย์ที่ส่งผ่านไปยังฟังก์ชันการเรียกกลับ


ฉันสามารถทำได้หลังนั้นมันชัดเจนกว่านี้เล็กน้อยแม้ว่าฉันไม่แน่ใจว่ามันรับประกันสิ่งอื่นได้จริงเนื่องจากarrอยู่ในขอบเขตที่ปิดการโทรกลับแต่ละครั้งแล้ว
jdphenix

และทันทีที่โพสต์ฉันได้ตระหนักถึงกรณีการใช้งานที่ชัดเจนอย่างหนึ่ง - หากคุณได้กำหนดการเรียกกลับไว้ที่อื่น ใส่หน้าอาย.
jdphenix

หน้าอายไม่จำเป็น ฉันมีคำถามที่แน่นอน (ทำไมคุณถึงต้องใช้อาร์เรย์ในเมื่อคุณมี arr) แต่การสังเกต / คำถามของคุณเคลียร์มันได้ขอบคุณมาก แม้ว่าคุณจะแปลกที่คุณเขียนคำตอบนั้นและคุณตั้งคำถามกับคำตอบของคุณเอง มีความคิดเห็นอื่น ๆ ที่คุณตอบกลับซึ่งอาจถูกลบไปแล้วหรือไม่?
redfox05

@Russell ถูกต้องมี (was) การสนทนาที่ถูกลบออกไปบางส่วน
jdphenix

33

ES6 + คำตอบประจำปี 2018 คือ :

    const arr = [1, 2, 3];

    arr.forEach((val, key, arr) => {
      if (Object.is(arr.length - 1, key)) {
        // execute last item logic
        console.log(`Last callback call at index ${key} with value ${val}` ); 
      }
    });

1
อย่าลืมว่า const และ let ไม่ใช่การประกาศทั่วโลกเนื่องจากใช้ได้เฉพาะในขอบเขตทันที ... ซึ่งแตกต่างจาก var ที่ยกไปด้านบนสุดของวิธีการ
Sterling Bourne

1
หึหึ ... เวอร์ชั่นก่อนกระชับและน่าอ่านกว่านี้มาก วัตถุนี้เป็นระเบียบ
giorgio79

2
มันเป็นเพียงเรื่องยุ่งถ้าคุณไม่เข้าใจ Giorgio79 มีประโยชน์มากมายในการใช้ Object.is () เป็นวิธีการหลักในการเปรียบเทียบกับ == หรือ === ขอบคุณสำหรับความคิดเห็นของคุณอย่างไรก็ตาม!
Sterling Bourne

3
@SterlingBourne คุณช่วยอธิบายเพิ่มเติมได้ไหมว่าประโยชน์เหล่านั้นคืออะไร? (เป็นการดีที่จะรวมไว้ในคำตอบด้วย)
ludovico

1
การใช้Object.isอะไรง่ายๆอย่างการเปรียบเทียบจำนวนเต็มสองจำนวน (ซึ่งไม่สามารถเป็น -0 หรือ NaN ได้) นั้นยุ่งเหยิงที่สุด บอกฉันว่า @SterlingBourne มีประโยชน์อย่างไร?
Gust van de Wal

4
const arr= [1, 2, 3]
arr.forEach(function(element){
 if(arr[arr.length-1] === element){
  console.log("Last Element")
 }
})

4
อาจไม่ได้ผลเสมอไป let o = { val:"ue" } ; let arr = [ o, 1, o ]; ...น่าเสียดายที่การทำซ้ำครั้งแรกจะมีarr[arr.length-1] === element
e2-e4
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.