Javascript 具有重复数组元素的循环行为异常

Javascript 具有重复数组元素的循环行为异常,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我想让[1,2,3,4,5].duplicated()起作用,但当我写: Array.prototype.duplicator = function (){ var a = []; for(var i=0;i<10;i+=2){ a[i]=this[i]; a[i+1]=this[i]; } return a; }; [1,2,3,4,5].duplicator(); Array.prototype.replicator=函数(){ var a=[];

我想让
[1,2,3,4,5].duplicated()
起作用,但当我写:

Array.prototype.duplicator = function (){
    var a = [];
    for(var i=0;i<10;i+=2){
    a[i]=this[i];
    a[i+1]=this[i];
}
return a;
};
 [1,2,3,4,5].duplicator();
Array.prototype.replicator=函数(){
var a=[];

对于(var i=0;i,因为每次迭代都要添加2,从而跨过数组边界。请尝试以下方法:

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

对于(var i=0;i您希望将每个值放置在
i*2
i*2+1
中,而不是
i
i+1
,并一次循环一步:

Array.prototype.duplicator = function (){
  var a = [];
  for(var i = 0; i < this.length; i++){
    a[i*2] = this[i];
    a[i*2+1] = this[i];
  }
  return a;
};
Array.prototype.replicator=函数(){
var a=[];
for(var i=0;i
这里有一个解决方案:

Array.prototype.duplicator = function() {
  var dup = [];
  for (var i = 0; i < this.length; i++) {
    dup[2 * i] = dup[2 * i + 1] = this[i];
  }
  return dup;
};

console.log([1,2,3,4,5].duplicator());
Array.prototype.replicator=function(){
var-dup=[];
for(var i=0;i
您可以绘制地图并展平,以获得更实用的方法:

Array.prototype.duplicate = function() {
  return [].concat.apply([], this.map(function(v) {
    return [v,v];
  }));
};

console.log([1,2,3].duplicate()); //=> [1,1,2,2,3,3]
Array.prototype.replicator=函数(){
var a=[],k=0;

对于(var i=0;i而言,最简单的答案应该是:

Array.prototype.duplicator=function () {
    return this.concat(this).sort();
}

console.log([1,2,3,4,5].duplicator());//[1,1,2,2,3,3,4,4,5,5]

在中的情况下,这适用于我,其中所需的结果是[1,2,3,4,5,1,2,3,4,5]。希望它适用于您

const duplicate = (...nums) => [].concat(...nums, ...nums);

console.log(duplicate([1, 2, 3, 4, 5]));

问题是“有人能告诉我为什么它不工作吗?”,所以请添加一些解释。简单的例子是你的代码包含bug。在第二次循环中,你的i==2,所以这个[i]===3你应该编辑问题,而不是发表评论。堆栈溢出的格式是问答,而不是讨论线程。在教别人如何使用堆栈溢出之前,先打开任何编程书怎么样?@AdiInbar-编辑问题中的代码是个坏主意。这可能会隐藏问题的原因。发表堆栈溢出没有错答案显示正确的代码-只要包含解释。这是最好的答案。这不是OP要求的。您的解决方案将导致:
[1,2,3,4,5,1,2,3,4,5]
而不是他们想要的:
[1,1,2,2,2,3,3,4,5,5]
我猜问这个问题的人是在试图解决来自的问题。在这种情况下,您的解决方案Olga是正确的!
Array.prototype.duplicator=function () {
    return this.concat(this).sort();
}

console.log([1,2,3,4,5].duplicator());//[1,1,2,2,3,3,4,4,5,5]
duplicator = val => val.concat(val);
const duplicate = (...nums) => [].concat(...nums, ...nums);

console.log(duplicate([1, 2, 3, 4, 5]));