Удаление ложностей из объекта JavaScript - PullRequest
5 голосов
/ 22 июля 2010

Поэтому я пишу короткую функцию для удаления членов из объекта, которые имеют ложные значения:

for (var key in object) {
    if (!object[key]) {
        delete object[key];
    }
}

Пару дней спустя я проверяю контроль версий, и кто-то изменил это на:

var newObject = {};
for (var key in object) {
    if (object[key]) { newObject[key] = object[key]; }
}
return newObject;

Там нет комментариев о регистрации, и парень не здесь сегодня на работе.

Какая реализация лучше? Каковы последствия производительности каждого метода?

Ответы [ 4 ]

3 голосов
/ 22 июля 2010

Вы не можете удалить свойство объекта, которое оно наследует от прототипа. Поэтому в некоторых случаях ваш код может не работать должным образом.

Источник

2 голосов
/ 22 июля 2010

Вы не можете delete свойство объекта, которое оно наследует от prototype (хотя вы можете удалить его непосредственно в прототипе).

Во втором примере ложное свойство, унаследованное от prototype, не будет скопировано в newObject.

Дополнительная литература:

1 голос
/ 16 августа 2014

Используя Lo-Dash , рассмотрите эту реализацию (используя _. Pick ):

var newObject = _.pick(object, function onlyTruthy(val, key) {
  return !!val;
});
0 голосов
/ 22 июля 2010

Я думаю, ваш код читается намного интуитивно.Может, он просто не хотел менять исходный объект?

...