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

标签 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);
  };
  return arr;
};

那么从这个问题(Concatenate array to itself in order to duplicate it)来看,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;
}

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

关于javascript - 在 Javascript 中重复数组的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24843241/

相关文章:

javascript - 我想了解ReactJS中的SetState和Prevstate

javascript - jQuery 插件语法/JavaScript 语法?

javascript - 为什么需要 JSON 对象序列化或者在 ajax 调用中发送到服务器很重要?

java - 如何乘以数组长度减去索引

google-apps-script - 在 Google Apps 脚本中,如何保留用户输入的换行符?

javascript - Laravel、jQuery - 在 Laravel 中验证后返回括号表示法(jQuery 中的点到括号表示法)

php - 如何在 PHP 中将 .csv 文件解析为多维数组?

arrays - VueJS : observer object instead of Array

javascript - Google 脚本 EPOCH 日期创建

javascript - 如何转换并传递 GAS 中的日期以在 Google 日历中创建事件?