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から継承するオブジェクトのプロパティを作成することはできませんprototype(ただし、プロトタイプで直接削除することはできます)。

2番目の例では、から継承された偽のプロパティ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 に答える