【轻松一刻】如何快速清空数组


赋为空数组

1
2
3
4
let arr1 = [1,2,3];
let arr2 = arr1;
arr1 = [];
console.log(arr1,arr2); // arr: [], arr2: [1,2,3]

重新赋值空数组,只是指向了一个新的引用,并没有把原数组清空,并且其他变量一旦引用了旧数组,数据依然存在。

shift

1
2
3
4
5
6
console.time("shift")
let arr1 = new Array(100000).fill(1);
while(arr1.length) {
arr1.shift();
}
console.timeEnd("shift"); // shift: 845.883056640625 ms

时间复杂度:O(n²),每次都要移动剩余的所有元素,从数组开头移除一个元素时,需要将数组中剩下的所有元素都向前移动一位,以填补被移除元素的位置
对于一个长度为 n 的数组,第一次 shift()需要移动 n-1 个元素,第二次 shift()需要移动 n-2 个元素…

pop

1
2
3
4
5
6
7
console.time("pop")
let arr1 = new Array(100000).fill(1);
while(arr1.length) {
arr1.pop();
}
console.timeEnd("pop"); // pop: 2.234130859375 ms
时间复杂度:O(n),需要执行n次pop操作

splice

1
2
3
4
console.time("splice")
let arr1 = new Array(100000).fill(1);
arr1.splice(0,arr1.length);
console.timeEnd("splice"); // splice: 1.026123046875 ms

从索引 0 开始,移除数组中所有元素

arr.leng = 0(最优方案)

1
2
3
4
console.time("length0")
let arr1 = new Array(100000).fill(1);
arr1.length = 0;
console.timeEnd("length0"); // length0: 0.72998046875 ms

原地修改、无需新建数组、速度最快,而且他仍然是个数组

哦对了,我最近开发了一个叫牛马工作器的chrome拓展插件,很好玩哦,感兴趣的话,给我的公众号回复牛马即可免费获取。

我的微信公众号: 梨的前端小屋


文章作者: 梨啊梨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 梨啊梨 !
  目录