dor*_*emi 2 javascript prototypal-inheritance
我正在尝试为js Array原型实现一个重复的方法,它将数组的副本连接到自身,如下所示:
[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]
Run Code Online (Sandbox Code Playgroud)
这是我的,但它导致浏览器崩溃:
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;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用原生JS作为迭代和算法的实践,所以我试图避免内置方法,如果可能的话,这样我就可以更清楚地了解事情是如何被移动的.
关于它崩溃的原因以及我如何优化它的任何想法?
循环中的代码改变了数组的长度,因此它将继续增长,你将永远不会到达它的末尾.获取变量中数组的初始长度并在循环条件中使用.您可以将其用作目标索引的偏移量而不是另一个计数器:
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;
}
Run Code Online (Sandbox Code Playgroud)