Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
Array.prototype.splice()是最常用的从数组中删除元素的方法。事实证明,这并不是最快的。如果您对大型数组执行许多操作,这可能是影响代码性能的一个特别重要的因素。
目录
- Array.prototype.splice()
- 更快的方法
Array.prototype.splice()
splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。
看到splice在运行是,主要是靠循环遍历类数组元素,然后返回一个被修改的内容。
如果在操作大型数组的时候,
更快的方法
可以使用一个非常简单的技巧来加快此操作,但是不能要求数组按照一定顺序排列。
- 将任何元素与最后一个元素交换
- 利用
Array.prototype.pop()删除最后一个元素
例如:
const arr = [3, 1, 5, 7, 9]; // 想删除5 (index: 2)
arr[2] = arr[arr.length -1];
// 将最后一个元素拷贝到index:2的位置
arr.pop(); // 删除最后一个元素
看一下测试:
let myCars = new Array(10000);
for (let index = 0; index < 10000; index++) {
myCars[index] = index+"test"
}
// splice方法
console.time("timer");
myCars.splice(5621,1)
console.timeEnd("timer");
// pop方法
console.time("timer");
myCars[5621] = myCars[myCars.length-1]
myCars.pop()
console.timeEnd("timer");
有人可能会认为将其缩短到arr[i] = arr.pop()会使其更加简洁。事实证明并非如此,因为如果我们尝试删除数组中的最后一个元素,这个较短的版本将会失败。
总结
- 替换+
pop()的方法比splice方法更快速 - 替换+
pop()的方法适用于数组不要求顺序 splice()会对原数组的元素改变,可能向后移动,可能向前移动,这些都会做循环遍历,最好的情况就是替换元素。