将值添加到数组的最有效方法
|
假设我有一个数组,数组的大小为
N
(其中N > 0
),是否有更有效的方式添加到不需要O(N + 1)步骤的数组?
本质上,在代码中,我目前正在做的是
function prependArray(value, oldArray) {
var newArray = new Array(value);
for(var i = 0; i < oldArray.length; ++i) {
newArray.push(oldArray[i]);
}
return newArray;
}
没有找到相关结果
已邀请:
9 个回复
距相镭
方法更简洁:
[编辑] 此jsPerf基准测试表明,至少可以在几个浏览器中使ѭ3更快,而如果您可以就地修改数组的话,不管big-O的性能如何,它的速度都差不多。如果您确实无法更改原始数组,则可以执行以下代码段,但似乎没有比您的解决方案快得多的方法:
[编辑2] 为了完整起见,可以使用以下函数代替OP的示例“ 7”来利用数组“ 8”的方法:
布埃郝卞簿
痰降锭骂奸
但这仍然是oldArray大小的O(N)。不过,它比手动遍历oldArray更有效。另外,根据细节,这可能会对您有所帮助,因为如果要添加多个值,最好先将它们放入一个数组中,然后在最后连接concat oldArray,而不是将每个值分别单独添加。 在oldArray的大小上,没有比O(N)更好的方法了,因为数组存储在连续的内存中,并且第一个元素固定在一个位置。如果要在第一个元素之前插入,则需要移动所有其他元素。如果您需要解决此问题的方法,请执行@GWW所说的并使用链表或其他数据结构。
鲁釜头
亥套惟间连
闲窍
葛瞎说漓
但是,如果要在数组前面添加几个元素,使用这种方法会更快:
誓猎贰
仅返回新数组的长度。 因此,要在开头添加元素并返回新数组,我这样做:
或简单地使用传播算子:
这样,原始阵列将保持不变。
傻零凰死授