839Empty an Array, but Preserve it’s Association

Creating an array 'a', creating an association from 'b' to 'a'.

var a = [1,2,3,4];
var b = a;

console.log(a);   // [1,2,3,4]
console.log(b);   // [1,2,3,4]

But what happens, when I want to empty the array using the 'b' variable? The first obvious attempt would be to assign a new, empty array to 'b'.

b = [];

console.log(a);   // [1,2,3,4]
console.log(b);   // []         NG!

Hmmm. Something's not quite right here. By assigning a new, empty array to 'b' we also lost our association with the 'a' array.

How can we keep the association and empty the array? T

b.length = 0 ;

b.push(1);
b.push(2);
b.push(3);
b.push(4);

console.log(a);   // [1,2,3,4]
console.log(b);   // [1,2,3,4]    OK!

There is also a slightly different way using splice.

b.splice(0, b.length);

b.push(1);
b.push(2);
b.push(3);
b.push(4);

console.log(a);   // [1,2,3,4]
console.log(b);   // [1,2,3,4]    OK!

In case you wonder, where this can be useful. Let's assume you have a global object and somewhere in it there's an array you want to do something with.


var myGlobalObj = {};
myGlobalObj.reallyLong = {};
myGlobalObj.reallyLong.andAnnoying = [];

var testFunction = function() {
    var sweet = myGlobalObj.reallyLong.andAnnoying;     // associate
    sweet.length = 0;   // empty sweet & myGlobalObj.reallyLong.anAnnoying Array
}