将数组与自身连接起来

时间:2013-02-08 14:29:09

标签: javascript arrays coffeescript

我正在尝试实施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']

3 个答案:

答案 0 :(得分:5)

array.concat返回一个新数组,不会修改现有数组。

你需要写

array = array.concat(dup)

或者,您可以使用push(),它会修改原始数组:

array.push.apply(array, dup)

答案 1 :(得分: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中那样做的。

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