การคัดลอกรหัสมีดังนี้:
a = ใหม่อาร์เรย์ ();
b = อาร์เรย์ใหม่ (125624);
A.push.apply (a, b);
รหัสด้านบนพ่นข้อยกเว้นต่อไปนี้ภายใต้ MAC Chrome
การคัดลอกรหัสมีดังนี้:
uncaught rangeerror: เกินขนาดสแต็กการโทรสูงสุด
หากคุณเปลี่ยนอาร์เรย์เป็น b = อาร์เรย์ใหม่ (125623); มันจะดีถ้าคุณมีองค์ประกอบที่เล็กกว่า ฉันทดสอบว่าเบราว์เซอร์อื่นมีปัญหากับอาร์เรย์ขนาดใหญ่ แต่ค่าที่สำคัญของเบราว์เซอร์ที่แตกต่างกันยังคงแตกต่างกัน
ฉันค้นหา http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/17368101#17368101
การคัดลอกรหัสมีดังนี้:
array.prototype.extend = function (other_array) {
/ * คุณควรรวมการทดสอบเพื่อตรวจสอบว่า other_array เป็นอาร์เรย์จริง ๆ */
other_array.foreach (ฟังก์ชั่น (v) {this.push (v)}, สิ่งนี้);
-
คำแนะนำที่ให้ไว้นั้นจะต้องซื่อสัตย์และใช้งานได้จริงซึ่งไม่เพียง แต่สามารถหลีกเลี่ยงปัญหาข้อยกเว้นของอาร์เรย์ขนาดใหญ่ได้ แต่ยังพิจารณาถึงประสิทธิภาพของ foreach ว่าเร็วที่สุด
หลุมเล็ก ๆ นี้ให้ความคิดสองอย่างกับฉัน:
1. การใช้งานแฟนซีบางอย่างเช่น A.push.apply (a, b); มันก็เพียงพอแล้วที่จะนำมาใช้เพื่อแสดงเมื่อคำถามสัมภาษณ์ ในทางปฏิบัติจะเป็นการดีกว่าที่จะใช้เส้นทางที่ซื่อสัตย์เพื่อหลีกเลี่ยงการเผชิญกับความผิดปกติและข้อผิดพลาดในการปฏิบัติงาน ตัวอย่างเช่นตัวอย่างโครงร่างสปริงเครือข่าย 3D จำนวนน้อยที่มีโหนดหลายสิบโหนดในบทความนี้ใช้ได้ดี เฉพาะเมื่อคุณพบปริมาณข้อมูลขนาดใหญ่จริงเช่น HT สำหรับตัวอย่างประสิทธิภาพเว็บในบทความนี้คุณสามารถทดสอบปัญหาได้หรือไม่
2. http://stackoverflow.com/questions/1374126 เมื่อมองหาคำตอบจาก Stackoverflow อย่าเพิ่งมุ่งเน้นไปที่คนที่โหวตมากที่สุด ความจริงมักจะอยู่ในมือของคนไม่กี่คน คำตอบที่มี 259 คะแนนในรูปด้านล่างคือหลุมและ 34 คะแนนเป็นการวิเคราะห์ที่สมบูรณ์แบบที่สุด: