Roman Numeral Converter อยากสอบถามตัวโค้ดของผมว่าระหว่าง function forEach กับ every ทำไมมันถึงให้ผลที่แต่ต่างกัน

บอกเราว่าเกิดอะไรขึ้น:
อธิบายปัญหาของคุณโดยละเอียดที่นี่
ในครั้งแรกที่ผมทำข้อนี้ ผมใช้วิธีวน loop โดยใช้ forEach ซ้อนกับ while loop แล้วถ้าเข้า case ก็จะ return false เพื่อหยุดกาารทำงานในลูปของ forEach แล้วกลับไปทำ while loop ใหม่ แต่ปรากฎว่ามันไม่หยุดการทำงานใน loop forEach ตอนเข้ากรณีที่ return false แต่ลองเปลี่ยนเป็น every มันหยุดการทำงานให้ อยากทราบถึงเหตุผลครับว่าทำไม loop forEach ถึงไม่หยุดการทำงานให้ตอน return false อะครับ ขอขอบคุณล่วงหน้าครับ

อันนี้คือรูปภาพประกอบครับ

  **รหัสของคุณ**

function convertToRoman(num) {
var roman = {1:"I",	4:"IV",5:"V"	,9:"IX",10:"X",40:"XL",	50:"L",90:"XC",	100:"C",400:"CD",	500:"D",900:"DM",1000:"M",}
var arr = Object.keys(roman);
arr = arr.reverse();
var s = "";
while(num != 0){
    console.log("num : ",num)
    arr.forEach(function(data){
      console.log(data,num)
      if(num >= data) {
        s += roman[data];
        num-=data;
        return false;
      }else return true
    })
}
console.log(s)
return s;
}
convertToRoman(888) 

  **ข้อมูลเบราว์เซอร์ของคุณ:**

ตัวแทนผู้ใช้คือ: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36

Challenge: Roman Numeral Converter

ไปสู่ the challenge:

อ้างอิงจากบทความ 3 things you didn’t know about the foreach loop in JS นี้นะ โดยสรุปก็คือ

  1. return หยุด loop ไม่ได้
  2. ไม่สามารถใช้ break ได้
  3. ไม่สามารถใช้ continue ได้

ขอบคุณสำหรับบทความดีๆครับ พอจะเข้าใจแล้วว่าเวลาเอา return false ใน forEach มันเป็นการ return false ในการเรียก callback function ที่ทำงานไล่ไปเรื่อยๆ อย่างเช่น forEach element แรก เรา return false ไปมันก็หยุดทำงานแค่ตัว function แรก ก็ไม่ได้ไปเกี่ยวกับการเรียก callback func ที่ element ตัวที่สอง แต่ก็ยังสงสัยอยู่อะครับว่าทำไม every ถึงหยุดการทำงานได้ ในเมื่อเป็นการเรียก callback func เหมือนกัน ขอบคุณสำหรับคำตอบอีกทีครับ

จาก every() นะครับ

The every() method tests whether all elements in the array pass the test implemented by the provided function. It returns a Boolean value.

ตามความหมายคือ จะทดสอบสมาชิกทุกตัว ผ่านเงื่อนไขที่เรากำหนดไว้หรือไม่(ผ่านคือได้ค่าความจริงเป็น true) และจะคืนค่าเป็น Boolean

ซึ่งตาม code ที่แนบมาเมื่อเข้าเงื่อนไข ที่มี return false เมธอด every() ก็จะหยุดทำงาน

1 Likes

โอ้ พอเข้าใจขึ้นมาแล้วครับ ขอบคุณมากครับบบ