对于具有重复数组元素的循环行为很奇怪

时间:2013-02-02 23:02:47

标签: javascript arrays for-loop

我希望make [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]。谁能告诉我为什么它不起作用?

9 个答案:

答案 0 :(得分:4)

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

alert([1,2,3,4,5].duplicator());

答案 1 :(得分: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]

答案 2 :(得分: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]

答案 3 :(得分:0)

因为你在每次迭代时都加2,所以超越了数组边界。试试这个:

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

答案 4 :(得分:0)

您希望将每个值放在i*2i*2+1中,而不是ii+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;
};

答案 5 :(得分: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());

答案 6 :(得分: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;
};

答案 7 :(得分:0)

duplicator = val => val.concat(val);

答案 8 :(得分: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]));