Javascript ลดอาร์เรย์ว่าง


109

เมื่อฉันลดอาร์เรย์ฉันกำลังพยายามหาเลขศูนย์ แต่ฉันไม่เข้าใจพฤติกรรมของฟังก์ชันอย่างชัดเจน

[].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

ผลลัพธ์

TypeError: Reduce of empty array with no initial value

ดูเหมือนว่าถ้าอาร์เรย์ว่างเปล่าฉันไม่สามารถลดได้

[""].reduce(function(previousValue, currentValue){
  return Number(previousValue) + Number(currentValue);
});

ผลลัพธ์

""

หากองค์ประกอบเดียวในอาร์เรย์เป็นสตริงว่างให้ดึงสตริงว่าง

คำตอบ:



24

พฤติกรรมทั้งสองเป็นไปตามสเปค

คุณไม่สามารถreduceจัดอาร์เรย์ว่างได้เว้นแต่คุณจะระบุค่า "สะสม" เริ่มต้นเป็นอาร์กิวเมนต์ที่สองอย่างชัดเจน:

หากไม่มีการระบุ initialValue ค่าก่อนหน้าจะเท่ากับค่าแรกในอาร์เรย์และ currentValue จะเท่ากับค่าที่สอง เป็น TypeError ถ้าอาร์เรย์ไม่มีองค์ประกอบและไม่มี initialValue

หากอาร์เรย์มีอย่างน้อยหนึ่งองค์ประกอบการระบุค่าเริ่มต้นเป็นทางเลือก อย่างไรก็ตามหากไม่ได้ระบุไว้องค์ประกอบแรกของอาร์เรย์จะถูกใช้เป็นค่าเริ่มต้นและreduceยังคงประมวลผลส่วนที่เหลือขององค์ประกอบอาร์เรย์โดยเรียกใช้การเรียกกลับของคุณ ในกรณีของคุณอาร์เรย์มีเพียงองค์ประกอบเดียวดังนั้นองค์ประกอบนั้นจะกลายเป็นค่าเริ่มต้นและค่าสุดท้ายด้วยเนื่องจากไม่มีองค์ประกอบที่ต้องประมวลผลผ่านการเรียกกลับอีกต่อไป

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