【发布时间】:2026-01-22 01:20:03
【问题描述】:
我想从数组中删除一个项目,array.splice(x,1) 是最好的方法吗?
array.splice(x,1) 在功能上是否等同于 delete array[x]; array.length-=1?
我已阅读以下主题:Javascript object with array, deleting does it actually remove the item? 和 Deleting array elements in JavaScript - delete vs splice
并做了一些测试:
<script>
var arr=[];
for(var x=0;x<100000;++x){
arr.push(x);
}
var a=new Date().getTime();
for(var x=0;x<50000;++x){
arr.splice(49999,1);
}
var b=new Date().getTime();
alert(b-a);
</script>
<script>
var arr=[];
for(var x=0;x<100000;++x){
arr.push(x);
}
var a=new Date().getTime();
for(var x=0;x<50000;++x){
delete arr[49999];
arr.length-=1;
}
var b=new Date().getTime();
alert(b-a);
</script>
时间差超过 100 的幅度,使得使用第二种解决方案的痒几乎无法抗拒.. 但在使用它之前,我想问一个问题:我使用时是否应该注意任何陷阱delete array[x]; array.length-=1 而不是 array.splice(x,1)?
【问题讨论】:
-
第二个 sn-p 没有做你想做的事:你试图一遍又一遍地删除元素
49999,而不是最后一个元素。此外,如果你想删除数组中间的某些东西,你不能简单地delete那个项目并将length属性减1。 -
@marc 你应该把它作为答案。太棒了
-
不,这不是您实际问题的答案,只是一个评论。 Tomalak 的回答更好,所以我支持他。
标签: javascript html web-applications