อาร์เรย์ JavaScript : ทำความเข้าใจเกี่ยวกับฟังก์ชั่นลด
วากยสัมพันธ์
arr.reduce(callbackFunction, [initialValue])
สิ่งที่ไม่ลดทำ?
ลดการเป็นฟังก์ชันที่ loops ผ่านอาร์เรย์.
การดำเนินงานที่สามารถดำเนินการในอาร์เรย์ผ่านฟังก์ชั่นการติดต่อกลับ.
ในตอนท้ายของการดำเนินงานในอาร์เรย์, ลดผลตอบแทนค่าเดียว
ลดสามารถนำมาใช้, ตัวอย่างเช่น, รวมรถเข็นช็อปปิ้ง
ตัวอย่าง
ให้ ARR = [1,2,3,4,5];
arr.reduce( (ผู้สะสม, currentValue, currentIndex, แถว) => {
//ดำเนินการบางอย่าง;
บางสิ่งบางอย่างกลับมา;
});
ฟังก์ชั่นการโทรกลับ
ฟังก์ชั่นการโทรกลับถูกเรียกสำหรับองค์ประกอบในอาร์เรย์แต่ละ, ผ่านใน 4 ข้อโต้แย้งที่จะถูกส่งผ่านโดยฟังก์ชั่นลด.
เหล่านี้ 4 ข้อโต้แย้งนั้นจะสามารถใช้ในการทำงานของเราโทรกลับ.
ใช้เวลาสี่ข้อโต้แย้ง
- ผู้สะสม – องค์ประกอบแรกของอาร์เรย์ในวงแรกหรือค่าเริ่มต้นถ้าให้มาด้วย. แล้วค่ากลับมาของวงก่อนหน้านี้.
- currentValue – องค์ประกอบปัจจุบันในอาร์เรย์. เริ่มต้นจากองค์ประกอบที่สองคือในอาร์เรย์. ARR[1], เมื่ออาร์กิวเมนต์ค่าเริ่มต้นไม่ผ่าน. ถ้าอาร์กิวเมนต์ค่าเริ่มต้นจะถูกส่งผ่านค่าปัจจุบันนั้นเริ่มจากองค์ประกอบ 1 ใน ARR อาร์เรย์[0].
- currentIndex – ดัชนีองค์ประกอบปัจจุบัน.
- แถว – อาร์เรย์ทั้ง.
ตัวอย่างการทำงาน
ให้ ARR = [1,2,3,4,5]; arr.reduce( (ผู้สะสม, currentValue, currentIndex, แถว) => { console.log(`สะสม (เมื่อวันที่ 1 ห่วง, สะสมเป็น ARR[0], แล้วมันเป็นค่ากลับมาของวงก่อนหน้านี้): ${ผู้สะสม}`); console.log(`currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[1]): ${currentValue}`); console.log(`currentIndex: ${currentIndex}`); console.log(`อาร์เรย์: ${แถว}`); console.log('---'); การกลับมาสะสม + currentValue; } );
เอาท์พุต
ผู้สะสม (เมื่อวันที่ 1 ห่วง, สะสมเป็น ARR[0], แล้วมันเป็นค่ากลับมาของวงก่อนหน้านี้): 1 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[1]): 2 currentIndex: 1 แถว: 1,2,3,4,5 --- ผู้สะสม (เมื่อวันที่ 1 ห่วง, สะสมเป็น ARR[0], แล้วมันเป็นค่ากลับมาของวงก่อนหน้านี้): 3 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[1]): 3 currentIndex: 2 แถว: 1,2,3,4,5 --- ผู้สะสม (เมื่อวันที่ 1 ห่วง, สะสมเป็น ARR[0], แล้วมันเป็นค่ากลับมาของวงก่อนหน้านี้): 6 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[1]): 4 currentIndex: 3 แถว: 1,2,3,4,5 --- ผู้สะสม (เมื่อวันที่ 1 ห่วง, สะสมเป็น ARR[0], แล้วมันเป็นค่ากลับมาของวงก่อนหน้านี้): 10 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[1]): 5 currentIndex: 4 แถว: 1,2,3,4,5 ---
ให้ค่าเริ่มต้น
ระบุพารามิเตอร์ที่สอง (initialValue) ในฟังก์ชั่นลดจะทำให้เกิด initialValue ที่จะผ่านในการเป็นอาร์กิวเมนต์สะสมในวงแรก.
โปรดทราบว่าค่าปัจจุบันในวงที่ 1 ในขณะนี้เริ่มต้นที่องค์ประกอบแรกของอาร์เรย์
ตัวอย่างการทำงาน
ให้ ARR = [1,2,3,4,5]; arr.reduce( (ผู้สะสม, currentValue, currentIndex, แถว) => { console.log(`สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): ${ผู้สะสม}`); console.log(`currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): ${currentValue}`); console.log(`currentIndex: ${currentIndex}`); console.log(`อาร์เรย์: ${แถว}`); console.log('---'); การกลับมาสะสม + currentValue; }, 0 );
เอาท์พุต
ผู้สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): 0 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): 1 currentIndex: 0 แถว: 1,2,3,4,5 --- ผู้สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): 1 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): 2 currentIndex: 1 แถว: 1,2,3,4,5 --- ผู้สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): 3 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): 3 currentIndex: 2 แถว: 1,2,3,4,5 --- ผู้สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): 6 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): 4 currentIndex: 3 แถว: 1,2,3,4,5 --- ผู้สะสม ( ในวงที่ 1, นี้เป็นค่าเริ่มต้น, แล้วค่ากลับมาของวงก่อนหน้านี้): 10 currentValue (loops ผ่านอาร์เรย์, เริ่มต้นที่ ARR[0]): 5 currentIndex: 4 แถว: 1,2,3,4,5 ---
