0

私は作品を作りたかっ[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();

[1, 1, 3, 3, 5, 5, undefined, undefined, undefined, undefined]の代わりに返します[1,1,2,2,3,3,4,4,5,5]。うまくいかない理由を誰かに教えてもらえますか?

4

9 に答える 9

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

alert([1,2,3,4,5].duplicator());
于 2013-09-20T15:26:11.483 に答える
1

より機能的なアプローチのために、単にmap平らにすることができます:

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]
于 2013-02-02T23:14:39.363 に答える
0

ここに修正があります:

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());
于 2013-02-02T23:09:36.473 に答える
0
Array.prototype.duplicator = function () {
    var a = [], k = 0;
    for(var i=0;i<this.length;i++) {
       a[k]=this[i];
       k++;
       a[k]=this[i];
       k++;
    }
    return a;
};
于 2014-03-26T23:11:14.300 に答える
0

各反復で 2 を追加しているため、配列の境界を超えています。代わりにこれを試してください:

for (var i=0; i<this.length; i++) {
    a.push(this[i]);
    a.push(this[i]);
}
于 2013-02-02T23:06:56.890 に答える
0

i*2andi*2+1の代わりにiandに各値を配置i+1し、一度に 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;
};
于 2013-02-02T23:07:08.833 に答える