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

在Javascript中重复数组的最快方法,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我一直在试图找到一种快速创建数组的方法,该方法基于将元素重复给定次数。就我的目的而言,通常我要重复的元素是另一个数组,我要用它制作一个长的重复(二维)数组,所以我希望它速度更快。请注意,在每个示例中,c=[element],因为这在我的代码中是自然发生的 我发现这里有一些选择。最基本的是选项1: function repeatSimple(c, n) { var arr = []; for (var i=0; i<n; i++) { arr = arr.concat(c);

我一直在试图找到一种快速创建数组的方法,该方法基于将元素重复给定次数。就我的目的而言,通常我要重复的元素是另一个数组,我要用它制作一个长的重复(二维)数组,所以我希望它速度更快。请注意,在每个示例中,
c=[element]
,因为这在我的代码中是自然发生的

我发现这里有一些选择。最基本的是选项1:

function repeatSimple(c, n) {
  var arr = [];
  for (var i=0; i<n; i++) {
    arr = arr.concat(c);
  };
  return arr;
};
我的想法是:(a)我对第二个选项的理解不够透彻,不知道它是否是一个好的解决方案;(b)必须像第一个选项那样调用
concat
a惊人的
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
两次log_2(
n


所以,我的问题是,最快的方法是什么?这是我正在考虑的选择之一,还是有什么别的东西把它们从水里吹出来?或者,所有这些选项的工作速度都是如此之快,以至于它真的没有什么区别吗?

我认为,即使不使用
concat
功能,实现这一点的最快方法是:

function repeatSimple(element, times)
{
    var result = [];
    for(var i=0;i<times;i++)
      result.push(element);
    return result;
}
另一个聪明的方法是加入一个数组并像这样拆分它

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

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

我认为这更适合@ArtjomB。代码审查用于审查已解决问题的代码problem@shiplu.mokadd.im我想这取决于这段代码是否运行。因为代码似乎不是最终的,我同意。我认为它取决于底层的js引擎优化。它可能会优化。如果引擎可以将数组元素复制/移动为连续的内存块,则较小的Concat可能会获胜。@ZigMandel我在Google Apps脚本中为一个Sheets项目执行此操作,因此它使用了它们的引擎。更小的concat是指连接更小的数组还是更少的concat调用?
function repeatSimple(element, times)
{
    (result = Array(times).join("," + element).split(',')).shift()
    return result;
}