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