Tôi không chắc về hiệu quả hơn về mặt big-O nhưng chắc chắn sử dụng unshift
phương pháp này ngắn gọn hơn:
var a = [1, 2, 3, 4];
a.unshift(0);
a; // => [0, 1, 2, 3, 4]
[Biên tập]
Điểm chuẩn jsPerf này cho thấy unshift
tốc độ nhanh hơn trong ít nhất một vài trình duyệt, bất kể hiệu suất big-O có thể khác nhau nếu bạn đồng ý với việc sửa đổi mảng tại chỗ. Nếu bạn thực sự không thể thay đổi mảng ban đầu thì bạn sẽ làm một cái gì đó như đoạn mã dưới đây, dường như không nhanh hơn giải pháp của bạn:
a.slice().unshift(0); // Use "slice" to avoid mutating "a".
[Chỉnh sửa 2]
Để hoàn thiện, có thể sử dụng hàm sau thay cho ví dụ của OP prependArray(...)
để tận dụng unshift(...)
phương thức 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];