2013-02-02 82 views
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]。誰能告訴我爲什麼它不起作用?

回答

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] 
0

因爲您在每次迭代時都加2,因此超出了數組邊界。試試這個:

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

你會想在i*2每個值i*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; 
}; 
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()); 
3
Array.prototype.duplicator=function() 
{ 
    return this.concat(this) 
} 

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

這是最好的一個。 – Jazzy

+0

這不是OP所要求的。您的解決方案將導致: '[1,2,3,4,5,1,2,3,4,5]' 而不是他們想要的東西: '[1,1,2,2 ,3,3,4,4,5,5]' 我認爲這個問題的人試圖解決[此鏈接]的一個問題(http://darcyclarke.me/development/front-end-job -interview-問題/)。在這種情況下,您的解決方案Olga是正確的! –

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; 
}; 
+0

問題是「誰能告訴我爲什麼它不起作用?」,所以請添加一些解釋。 –

+0

簡單的exaplianation,您的代碼包含錯誤。在secound迭代你的我=== 2所以這[i] === 3 – Nikita

+0

你應該編輯的問題,而不是發表評論。堆棧溢出的格式是問答,而不是討論線程。 –

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]