javascript looping и удаление свойств объекта

У меня есть объект с различными свойствами. Имя объекта является глобальной переменной, но свойства изменяются во время выполнения методами. Некоторые методы добавляют свойства к объекту. Я хотел бы добавить метод, который проходит через этот объект и удаляет все его свойства, которые являются либо пустыми, либо пустыми. Я могу проверить каждое свойство, указав его имя и проверив его состояние, но если я добавлю свойства позже, мне придется также обновить этот метод очистки. Как я могу прокручивать свойства объекта, не зная сначала имя свойств.

Спасибо за ваши предложения.

Ответ 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).

Ответ 2

Вы можете использовать a для каждого цикла для итерации свойств объекта.

for ( var i in obj ) {
    if ( obj[i] === null ) {
        delete obj[i];
    }
}