将一个数组与自身连接

4

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

@IvayloStrandjev:不是;这是CoffeeScript。 - SLaks
这是Coffeescript。它可以编译成Javascript。 - Tomáš Zato
你为什么要克隆原始数组? - SLaks
3个回答

10
< p > array.concat 返回一个新的数组,并且不会修改原始的数组。

您需要编写:

array = array.concat(dup)

你也可以使用 push(),它会修改原始数组:

array.push.apply(array, dup)

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中该如何实现。


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]);
      }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接