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 回答
1

最简单的答案应该是:

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]
于 2017-03-05T12:06:24.723 回答
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而不是iandi+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 回答
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
duplicator = val => val.concat(val);
于 2019-02-21T22:02:47.847 回答
0

这适用于我遵循https://github.com/h5bp/Front-end-Developer-Interview-Questions/blob/master/src/questions/javascript-questions.md中的案例,其中所需的结果是 [1, 2、3、4、5、1、2、3、4、5]。希望对你有帮助!

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

console.log(duplicate([1, 2, 3, 4, 5]));
于 2020-07-06T14:47:43.837 回答