假设我有一个大小为N
(where 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;
}
我不确定在大O方面是否更有效,但肯定使用unshift
方法更简洁:
var a = [1, 2, 3, 4];
a.unshift(0);
// => [0, 1, 2, 3, 4]
console.log({a});
[Edit]
This jsPerf 基准测试 http://jsperf.com/array-unshift-vs-prepend表明unshift
至少在几个浏览器中速度相当快,无论 big-O 性能可能不同if您可以就地修改数组。如果您确实无法改变原始数组,那么您将执行类似以下代码片段的操作,这似乎并不比您的解决方案快得多:
a.slice().unshift(0); // Use "slice" to avoid mutating "a".
[Edit 2]
为了完整起见,可以使用以下函数代替OP的示例prependArray(...)
利用数组unshift(...)
method:
function prepend(value, array) {
var newArray = array.slice();
newArray.unshift(value);
return newArray;
}
var x = [1, 2, 3];
var y = prepend(0, x);
// x => [1, 2, 3];
// y => [0, 1, 2, 3];
console.log({ x, y });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)