JavaScript: Recursive and iterative object deletion

The use of object is quite important in javascript especially in complicated web applications. Although JavaScript engines clean up after themselves once the variable is no longer referenced, but from time to time there might be needs to manually “dispose” objects to free up memories or for security reason. In JavaScript, this can be achieved by the delete keyword.

So a very simiple way of doing this is just iterating through all child objects and do the work:

var person = {firstName:"Leon",lastName:"Zhou",age:"28",sex:"male"};
for (var obj in person) delete person[obj];
delete person;

However, what if you want to delete children objects that are more than 1 level deep? This is usually done in a recursive way:

function dispose(obj) {
    for (var o in obj) if (isNaN(parseInt(o))) dispose(obj[o]);
    delete obj;
}

var person = { name: { first: "Leon", Last: "Zhou" }, age: "28" };
dispose(person);
delete person;

Note that in the recursive function dispose, I had to check if o is an integer. This is to prevent the function going into infinite recursion because when obj is a single letter, the first var o in obj will always be “0”, and obj[o] will always return obj itself.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s