ฉันไม่แน่ใจเกี่ยวกับประสิทธิภาพในแง่ของ big-O แต่แน่นอนว่าการใช้unshift
วิธีนี้มีความกระชับมากกว่านี้:
var a = [1, 2, 3, 4];
a.unshift(0);
a; // => [0, 1, 2, 3, 4]
[แก้ไข]
เกณฑ์มาตรฐาน jsPerfนี้แสดงให้เห็นว่าunshift
เร็วขึ้นอย่างเห็นได้ชัดในเบราว์เซอร์อย่างน้อยสองตัวโดยไม่คำนึงถึงประสิทธิภาพการทำงานของ big-O ที่แตกต่างกันหากคุณเห็นด้วยกับการปรับเปลี่ยนอาร์เรย์ในสถานที่ หากคุณไม่สามารถกลายพันธุ์อาเรย์ดั้งเดิมได้คุณควรทำบางอย่างเช่นข้อมูลโค้ดด้านล่างซึ่งดูเหมือนจะไม่รวดเร็วกว่าโซลูชันของคุณ:
a.slice().unshift(0); // Use "slice" to avoid mutating "a".
[แก้ไข 2]
เพื่อความสมบูรณ์ฟังก์ชันต่อไปนี้สามารถใช้แทนตัวอย่างของ OP prependArray(...)
เพื่อใช้ประโยชน์จากunshift(...)
วิธีArray :
function prepend(value, array) {
var newArray = array.slice();
newArray.unshift(value);
return newArray;
}
var x = [1, 2, 3];
var y = prepend(0, x);
y; // => [0, 1, 2, 3];
x; // => [1, 2, 3];