How to prototype a duplicate prototype method for Array in javascript

I’m trying to implement a duplicate method to the js Array prototype which concats a duplicate of the array to itself like so:

[11,22,3,34,5,26,7,8,9].duplicate(); // [11,22,3,34,5,26,7,8,9,11,22,3,34,5,26,7,8,9]

Here’s what I have, but it causes the browser to crash:

var array = [11,22,3,34,5,26,7,8,9];

Array.prototype.duplicate = function() {

  var j = this.length;

  for(var i = 0; i < this.length; i++) {
    this[j] = this[i];
    j++;
  }

  return this;
}

I’m trying to do this using native JS as practice for iterations and algorithms so I’m trying to avoid built-in methods, if possible, so that I can get a clearer understanding of how things are being moved around.

Any ideas on why it is crashing and how I can optimize it?

Answer

The code inside the loop changes the length of the array, so it will just keep growing and you will never reach the end of it. Get the initial length of the array in a variable and use in the loop condition. You can use that as offset for the target index also instead of another counter:

var array = [11,22,3,34,5,26,7,8,9];

Array.prototype.duplicate = function() {

  var len = this.length;

  for (var i = 0; i < len; i++) {
    this[len + i] = this[i];
  }

  return this;
}