【问题标题】:Concatenating an array with itself将数组与自身连接起来
【发布时间】:2013-01-24 08:21:03
【问题描述】:

我正在尝试实现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。
  • 它的咖啡本。可以编译成javascript。
  • 为什么要克隆原始数组?

标签: javascript arrays coffeescript


【解决方案1】:

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

你需要写

array = array.concat(dup)

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

array.push.apply(array, dup)

【讨论】:

    【解决方案2】:

    我认为函数应该是这样的:

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

    【讨论】:

      【解决方案3】:

      这很简单:

      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 中做到这一点。

      【讨论】:

        猜你喜欢
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 2019-06-21
        • 1970-01-01
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        相关资源
        最近更新 更多