5

因此,我编写了一个简短的函数来从具有虚假值的对象中删除成员:

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

4 回答 4

3

您不能删除从原型继承的对象的属性。因此,在某些情况下,您的代码可能无法按预期工作。

资源

于 2010-07-21T21:58:11.673 回答
2

您不能delete从 a 继承的对象的属性prototype(尽管您可以直接在原型上删除它)。

在第二个示例中,从 a 继承的虚假属性prototype不会被复制到newObject.

进一步阅读:

于 2010-07-21T21:58:23.203 回答
1

使用Lo-Dash,考虑这个实现(使用_.pick):

var newObject = _.pick(object, function onlyTruthy(val, key) {
  return !!val;
});
于 2014-08-15T22:09:57.700 回答
0

我认为你的代码读起来更直观。也许他只是不想改变原来的对象?

于 2010-07-21T21:58:25.853 回答