•หลักการ:
•เบราว์เซอร์ขั้นสูงรองรับวิธีการ foreach
ไวยากรณ์: ทั้ง foreach และ map support 2 พารามิเตอร์: หนึ่งคือฟังก์ชันการโทรกลับ (รายการ, ดัชนี, รายการ) และบริบท;
• foreach: ใช้ซ้ำผ่านแต่ละรายการในอาร์เรย์; การดำเนินการวิธีนี้ไม่มีค่าส่งคืนและไม่มีผลต่ออาร์เรย์ดั้งเดิม
•มีหลายรายการในอาร์เรย์ดังนั้นฟังก์ชั่นการโทรกลับที่ไม่ระบุชื่อจึงผ่านไปในความต้องการที่จะดำเนินการหลายครั้ง
•ทุกครั้งที่มีการดำเนินการฟังก์ชันที่ไม่ระบุชื่อค่าพารามิเตอร์สามค่าจะถูกส่งผ่านไปยัง: รายการปัจจุบันในอาร์เรย์ดัชนีดัชนีของรายการปัจจุบันและอินพุตอาร์เรย์ดั้งเดิม
•ในทางทฤษฎีวิธีนี้จะไม่ส่งคืนค่ามันเพียงแค่ผ่านทุกรายการในอาร์เรย์และไม่ได้แก้ไขอาร์เรย์ดั้งเดิม แต่เราสามารถปรับเปลี่ยนอาร์เรย์ดั้งเดิมด้วยตัวเองผ่านดัชนีของอาร์เรย์
•สิ่งนี้ในวิธีการ foreach เป็น ary และสิ่งนี้ในฟังก์ชันการโทรกลับที่ไม่ระบุชื่อคือหน้าต่างโดยค่าเริ่มต้น;
var ary = [12,23,24,42,1]; var res = ary.foreach (ฟังก์ชั่น (รายการ, ดัชนี, อินพุต) {อินพุต [ดัชนี] = รายการ*10;}) console.log (res); //-> undefined; console.log (ary); //-> จะเปลี่ยนอาร์เรย์ดั้งเดิม;•แผนที่: คล้ายกับ foreach มาก มันถูกใช้ซ้ำผ่านค่าแต่ละรายการในอาร์เรย์และซ้ำผ่านแต่ละรายการในอาร์เรย์
•ความแตกต่าง: รองรับค่าส่งคืนคืนได้ในฟังก์ชันการเรียกกลับแผนที่ สิ่งที่ผลตอบแทนเทียบเท่ากับการเปลี่ยนรายการนี้ในอาร์เรย์เป็นสาเหตุ (มันไม่ส่งผลกระทบต่ออาร์เรย์ดั้งเดิมมันเทียบเท่ากับการโคลนนิ่งสำเนาของอาร์เรย์ดั้งเดิมและเปลี่ยนรายการที่เกี่ยวข้องในอาร์เรย์โคลน);
•แต่ละหรือแผนที่รองรับค่าพารามิเตอร์ที่สอง พารามิเตอร์ที่สองหมายถึงการแก้ไขสิ่งนี้ในฟังก์ชันการโทรกลับแบบไม่ระบุชื่อ
var ary = [12,23,24,42,1]; var res = ary.map (ฟังก์ชั่น (รายการ, ดัชนี, อินพุต) {รายการส่งคืน*10;}) console.log (res); //-> [120,230,240,420,10]; console.log (ary);•วิธีการเขียนที่เข้ากันได้:
•ไม่ว่าจะเป็น foreach หรือ map ใน IE6-8 (ไม่มีสองวิธีใน array.prototype เมื่อเข้ากันไม่ได้) เราจำเป็นต้องห่อหุ้มทั้งสองวิธีที่เข้ากันได้กับตัวเองรหัสมีดังนี้:
/*** อาร์เรย์ traversal foreach* @param callback [ฟังก์ชั่น] ฟังก์ชั่นการโทรกลับ; * บริบท @param [วัตถุ] บริบท; */array.prototype.myforeach = function myforeach (การโทรกลับ, บริบท) {บริบท = บริบท || หน้าต่าง; if ('foreach' ใน array.prototye) {this.foreach (การโทรกลับบริบท); กลับ; } // ใน IE6-8 เขียนตรรกะสำหรับการดำเนินการของฟังก์ชันการโทรกลับด้วยตัวเองสำหรับ (var i = 0, len = this.length; i <len; i ++) {callback && callback.call (บริบท, [i], i, this); - /*** แผนที่ Traversal Array* @param callback [ฟังก์ชั่น] ฟังก์ชั่นการโทรกลับ; * บริบท @param [วัตถุ] บริบท; */array.prototype.mymap = function mymap (การเรียกกลับ, บริบท) {บริบท = บริบท || หน้าต่าง; if ('map' ใน array.prototye) {return this.map (การเรียกกลับบริบท); } // ie6-8 ตรรกะในการเขียนฟังก์ชันการเรียกกลับด้วยตัวเอง var newary = []; สำหรับ (var i = 0, len = this.length; i <len; i ++) {ถ้า (typeof callback === 'function') {var val = callback.call (บริบท, [i], i, this); newary [newary.length] = val; }} return Newary;}PS: หากมีข้อผิดพลาดใด ๆ ในวิธีการเขียนข้างต้นโปรดแก้ไขให้ถูกต้อง ^^
วิธีการแนะนำข้างต้นเกี่ยวกับอาร์เรย์ traversal foreach () และ map () วิธีการและวิธีการเขียนที่เข้ากันได้ใน JavaScript เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น