samccone samccone - 4 months ago 21
Javascript Question

Most efficient way to prepend an array in Javascript

assuming I have an array X and X has a size of N (where N > 0)

is there a more efficient way of prepending the array that would not require O(N+1) steps?

in code essentially what I currently am doing is

function prependArray(value,oldArray) {
var newArray = new Array(value);
for(var i = 0; i < oldArray.length; ++i) {
newArray.push(oldArray[i]);
}
return newArray;
}


Thanks

Answer

I'm not sure about more efficient in terms of big-O but certainly using the unshift method is more concise:

var a = [1, 2, 3, 4];
a.unshift(0);
a; // => [0, 1, 2, 3, 4]

[Edit]

This jsPerf benchmark shows that unshift is decently faster in at least a couple of browsers, regardless of possibly different big-O performance iff you are ok with modifying the array in-place. If you really can't mutate the original array then you would do something like the below snippet, which doesn't seem to be appreciably faster than your solution:

a.slice(0).unshift(0); // Use "slice" to avoid mutating "a".

[Edit 2]

For completeness, the following function can be used instead of OP's example prependArray(...) to take advantage of the Array unshift(...) method:

function prepend(value, array) {
  var newArray = array.slice(0);
  newArray.unshift(value);
  return newArray;
}

var x = [1,2,3];
var y = prepend(0, x);
y; // => [0,1,2,3];
x; // => [1,2,3];
Comments