gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 08:05:24 25 4
gpt4 key购买 nike

我一直在尝试找出一种基于重复给定次数的元素来创建数组的快速方法。出于我的目的,通常我要重复的元素是另一个数组,并且我会用它制作一个长重复(二维)数组,所以我希望它速度快。请注意,在每个示例中,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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com