20

I've been looking to clear an array in ActionScript 3.

Some method suggest : array = []; (Memory leak?)

Other would say : array.splice(0);

If you have any other, please share. Which one is the more efficient?

Thank you.

ketan
  • 19,129
  • 42
  • 60
  • 98
ALOToverflow
  • 2,679
  • 5
  • 36
  • 70

5 Answers5

29

array.length = 0 or array.splice() seems to work best for overall performance.

array.splice(0); will perform faster than array.splice(array.length - 1, 1);

Jason
  • 2,503
  • 3
  • 38
  • 46
  • 1
    I know this is an old topic but how about setting an array to null? – drpelz Feb 27 '12 at 22:07
  • 5
    Actually `array = null;` gets rid of the Array itself instead of just cleaning it. Its basically the same that happens when you `array = [];`, the previous array reference is lost and will probably be garbage collected (which might not be the wanted outcome). – Biro456 Dec 21 '12 at 19:48
  • 1
    Why do not `array = new Array()`? – Gaston Flores Jul 19 '13 at 15:43
6

For array with 100 elements (benchmarks in ms, the lower the less time needed):

// best performance (benchmark: 1157)
array.length = 0;
// lower performance (benchmark: 1554)
array = [];
// even lower performance (benchmark: 3592)
array.splice(0);
n4pgamer
  • 624
  • 1
  • 6
  • 20
2

There is a key difference between array.pop() and array.splice(array.length - 1, 1) which is that pop will return the value of the element. This is great for handy one liners when clearing out an array like:

while(myArray.length > 0){
     view.removeChild(myArray.pop());
}
gregoryb
  • 81
  • 1
  • 4
2

I wonder, why you want to clear the Array in that manner? clearing all references to that very array will make it available for garbage collection. array = [] will do so, if array is the only reference to the array. if it isn't then you maybe shouldn't be emtpying it (?)

also, please note that`Arrays accept Strings as keys. both splice and lenght operate solely on integer keys, so they will have no effect on String keys.

btw.: array.splice(array.length - 1, 1); is equivalent to array.pop();

Taryn
  • 242,637
  • 56
  • 362
  • 405
back2dos
  • 15,588
  • 34
  • 50
1
array.splice(0,array.length);

this has always worked pretty well for me but I haven't had a chance to run it through the profiler yet

Sergey Glotov
  • 20,200
  • 11
  • 84
  • 98
chris
  • 11
  • 1