Ответ 1
Итерации над объектом прост - for in
цикле:
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
не существует, вы должны определить его или заменить его чем-то более значимым, я не мог понять, что вы имели в виду пустым в своем вопросе.
Я использую object.hasOwnProperty
потому что объекты наследуют объекты от Object.prototype
и, возможно, в других местах (например массивы, наследуемые от Array.prototype
, которые наследуются от Object.prototype
). Так:
object.toString; //function toString() { [native code] }
Но object.toString
самом деле ссылается на Object.prototype.toString
- это не совсем в вашем объекте, но когда вы вводите object.toString
, интерпретатор видит, что нет object.toString
, поэтому он проверяет цепочку прототипов, пока не будет находит это.
hasOwnProperty
проверяет, действительно ли ключ существует на объекте:
object.hasOwnProperty("toString"); //false
object.foo = "bar";
object.hasOwnProperty("foo"); //true
Подстрочный доступ к объектам также прост:
var object = {foo: "bar"};
object.foo; //"bar"
object["foo"]; //"bar"
var key = "foo";
object[key]; //"bar"
Обратите внимание, что все, что передается в скобки, преобразуется в строку. Так, например, вы можете сделать это:
object[Object.prototype.toString] = "magic";
Object.keys(object); //["function toString() { [native code] }"]
Если вам интересно, Object.keys - это ES5 (EcmaScript 5).