samccone - 3 months ago 15x

Javascript Question

**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];
```

Source (Stackoverflow)

Comments