Não tenho certeza de que seja mais eficiente em termos de big-O, mas certamente o uso do unshift
método é mais conciso:
var a = [1, 2, 3, 4];
a.unshift(0);
a; // => [0, 1, 2, 3, 4]
[Editar]
Esse benchmark jsPerf mostra que unshift
é decentemente mais rápido em pelo menos alguns navegadores, independentemente do desempenho de grande O possivelmente diferente, se você estiver certo em modificar a matriz no local. Se você realmente não pode alterar a matriz original, faria algo como o snippet abaixo, que não parece ser apreciavelmente mais rápido que sua solução:
a.slice().unshift(0); // Use "slice" to avoid mutating "a".
[Editar 2]
Para completar, a seguinte função pode ser usada em vez do exemplo do OP prependArray(...)
para tirar proveito do unshift(...)
método 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];