I want to remove an item from an array, is array.splice(x,1) the best way to go?
Is array.splice(x,1) functionally equivalent to delete array[x]; array.length-=1 ?
I’ve read these threads: Javascript object with array, deleting does it actually remove the item? and Deleting array elements in JavaScript – delete vs splice
and did some tests:
<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>
The timing difference is over a magnitude of 100, making the itch to use the second solution almost irresistable.. but before using it, I would like to ask this question: are there any traps i should look out for when i use delete array[x]; array.length-=1 instead of array.splice(x,1)?
If you’re just lopping off the last element in the array, you can use
pop()and throw away the result or just decrement the length by 1. Thedeleteoperator isn’t even required here, andsplice()is more appropriate for other uses.Specifically, section 15.4 of the ECMAScript specification says:
Both methods mentioned are outlined at MDC:
pop()lengthEither are appropriate for your situation – by all means modify
lengthif you get better performance from it.