Array unshift vs prepend (v9)

Revision 9 of this benchmark created on


Preparation HTML

<script>
  var a;
  var prependArray = function(value, oldArray) {
      var i, len = oldArray.length + 1,
          newArray = new Array(len);
      newArray[0] = value;
      for (i = 0; i < len; ++i) {
        newArray.push(oldArray[i]);
      }
      return newArray;
      }
      
      
      
  var unshiftArrayWhileBackward = function(arr, item) {
      var len = arr.length;
      while (len) {
        arr[len] = arr[len - 1];
        len--
      }
      arr[0] = item;
      return arr
      };

  var unshiftArrayWhileForward = function(arr, item) {
      var len = arr.length;
      var i = -1;
      var temp = item;
      var temp2 = item;
      while (++i < len) {
        temp = temp2;
        temp2 = arr[i];
        arr[i] = temp;
      }
      arr[len] = temp2;
      return arr
      };

  var unshiftArrayForBackward = function(arr, item) {
      var len = arr.length;
      for (; len;) {
        arr[len] = arr[len - 1];
        len--
      }
      arr[0] = item;
      return arr
      };

  var unshiftArrayForForward = function(arr, item) {
      var len = arr.length;
      var temp = item;
      var temp2 = item;
      for (var i = 0; i < len; i++) {
        temp = temp2;
        temp2 = arr[i];
        arr[i] = temp;
      }
      arr[len] = temp2;
      return arr
      };
</script>

Test runner

Ready to run.

Testing in
TestOps/sec
Unshift
a = [1, 2, 3, 4];
a.unshift(0);
ready
Prepend function
a = [1, 2, 3, 4];
prependArray(0, a);
ready
Unshift without mutation
a = [1, 2, 3, 4];
a.slice(0).unshift(0);
ready
Concat
a = [1, 2, 3, 4];
[0].concat(a);
ready
Manual unshift while loop backward
a = [1, 2, 3, 4];
unshiftArrayWhileBackward(a, 0);
ready
Manual unshift while loop forward
a = [1, 2, 3, 4];
unshiftArrayWhileForward(a, 0);
ready
Manual unshift for loop backward
a = [1, 2, 3, 4];
unshiftArrayForBackward(a, 0);
ready
Manual unshift for loop forward
a = [1, 2, 3, 4];
unshiftArrayForForward(a, 0);
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.