繁体   English   中英

在Javascript中重复数组的最快方法

[英]Fastest way to repeat an array in Javascript

我一直在尝试找出一种基于重复给定次数元素来创建数组的快速方法。 出于我的目的,通常我要重复的元素是另一个数组,我会用它做成一个长的重复(二维)数组,所以我希望它快。 请注意,在每个示例中, c=[element]因为它自然地出现在我的代码中。

我在这里找到了一些选择。 最基本的是选项1:

function repeatSimple(c, n) {
  var arr = [];
  for (var i=0; i<n; i++) {
    arr = arr.concat(c);
  };
  return arr;
};

然后从这个问题(将数组连接到自身以便对其进行复制 ),gdbdmdb有另一个选择:

function repeatApply(c, n) {
  return [].concat.apply([], Array.apply(0, Array(n)).map(function() { return c }));
};

我的想法是(a)我不太了解第二个选项,以至于不知道这是否是一个好的解决方案,并且(b)像第一个选项一样,必须concat调用n次,这真是愚蠢。 所以我又想出了一个:

function repeatBinary(c, n) {
  var arr = [];
  var r = 0;
  while (n>0) {
    r = n%2;
    if (r>0) {
      arr = arr.concat(c);
    };
    n = (n-r)/2;
    if (n>0) {
      c = c.concat(c);
    };
  };
  return arr
};

这样,我最多只需要调用concat 2log_2( n )次。

所以,我的问题是,最快的方法是什么? 是我在这里查看的选项之一,还是有其他东西可以将它们从水中吹走? 还是所有这些选项都以类似的速度工作,而实际上并没有什么不同?

我认为即使使用concat功能,最快的方法也可以:

function repeatSimple(element, times)
{
    var result = [];
    for(var i=0;i<times;i++)
      result.push(element);
    return result;
}

而且,如果您不想使用push函数,则可以像这样将值直接分配给数组中的项目

function repeatSimple(element, times)
{
    var result = Array(times);
    for(var i=0;i<times;i++)
      result[i] = element;
    return result;
}

另一个聪明的方法是连接一个数组并像这样拆分它

function repeatSimple(element, times)
{
    (result = Array(times).join("," + element).split(',')).shift()
    return result;
}

但是最后一个函数返回一个字符串数组,您必须将每个元素转换为所需的类型,但是无论如何,这些函数可能会帮助您

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM