我正在尝试实施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 :(得分: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]);
}
}
}