2013-02-08 20 views
3

我試圖實現Array.repeat,所以串聯自身的數組

[3].repeat(4) // yields 
=> [3, 3, 3, 3] 

...並讓我發瘋了。

試過這樣:

Array::repeat = (num)-> 
    array = new Array 
    for n in [0..num] 
    array.concat(this) 
    array 

[3].repeat(x)總是返回[]。我在哪裏搞砸了?還是有更好的方法做到這一點?

最終結果:

Array::repeat = (num)-> 
    array = new Array 
    return array if num < 1 
    for n in [1..num] 
    array = array.concat(this) 
    array 

['a'].repeat(5) 
=> ['a', 'a', 'a', 'a', 'a'] 
+0

這是javascript嗎? – 2013-02-08 14:31:04

+0

@IvayloStrandjev:No;它是CoffeeScript。 – SLaks 2013-02-08 14:31:15

+0

它的coffescript。它可以編譯爲JavaScript。 – 2013-02-08 14:31:25

回答

5

array.concat返回一個新的數組,不修改現有的。

你需要寫

array = array.concat(dup) 

或者,你可以使用push(),它不修改原始數組:

array.push.apply(array, dup) 
0

我覺得這是函數應該什麼樣子:

Array.prototype.repeat = function(count) { 
    if(count==null||1*count!=count) //check for cerrect count 
     return this.valueOf(); 
    var length = this.length;  //Length 
    var return = this.valueOf(); //0 repats equals in the same array 
    for(var i=0; i<count; i++) { //Repeating the count 
     for(var j=0; j<length; j++) { 
     return.push(this[j]); 
     } 
    } 
} 
1

這很簡單:

function repeat(array, n){ 
    var out = []; 
    for(var i = 0; i < n; i++) { 
     out = out.concat(array); 
    } 
    return out; 
} 

或原型:

Array.prototype.repeat = function(n){ 
    var out = []; 
    for(var i = 0; i < n; i++) { 
     out = out.concat(this); 
    } 
    return out; 
} 

這是本地JS,不知道你會怎麼做,在CoffeeScript的。