javascript looping and deleting object properties
You can use a for each loop to iterate through the object properties.
for ( var i in obj ) {
if ( obj[i] === null ) {
delete obj[i];
}
}
Iteration over an object is simple - the for in
loop:
for (var key in object) {
if (object.hasOwnProperty(key)) {
//Now, object[key] is the current value
if (object[key] === null || isEmpty(object[key]))
delete object[key];
}
}
isEmpty
doesn't exist, you have to define it or replace it with something more meaningful, I couldn't understand what you meant by empty in your question.
I use object.hasOwnProperty
because objects inherit things from Object.prototype
and possibly other places (arrays for example inherit from Array.prototype
, which inherits from Object.prototype
). So:
object.toString; //function toString() { [native code] }
But, object.toString
actually refers to Object.prototype.toString
- it isn't really in your object, but when you type object.toString
, the interpreter sees that there's no object.toString
, so it checks up the prototype chain until it finds it.
hasOwnProperty
checks if a key actually exists on an object:
object.hasOwnProperty("toString"); //false
object.foo = "bar";
object.hasOwnProperty("foo"); //true
Subscript access to objects is also simple:
var object = {foo: "bar"};
object.foo; //"bar"
object["foo"]; //"bar"
var key = "foo";
object[key]; //"bar"
Note that whatever is passed to the brackets gets converted to a string. So, for example, you can do this:
object[Object.prototype.toString] = "magic";
Object.keys(object); //["function toString() { [native code] }"]
In case you're wondering, Object.keys is an ES5 (EcmaScript 5) feature.