1. ホーム
  2. javascript

[解決済み] Underscore.jsでオブジェクトから空のプロパティ/偽の値を削除する

2023-04-14 10:01:12

質問

いくつかのプロパティを持つオブジェクトがあります。私は偽の値を持つ任意のプロパティを削除したいと思います。

これを実現するには compact で実現できますが、オブジェクトの場合はどうでしょうか?

どのように解決するのですか?

アンダースコアのプラグイン(mixin)を自作すればよいでしょう。

_.mixin({
  compactObject: function(o) {
    _.each(o, function(v, k) {
      if(!v) {
        delete o[k];
      }
    });
    return o;
  }
});

そして、それをネイティブのアンダースコア・メソッドとして使う :

var o = _.compactObject({
  foo: 'bar',
  a: 0,
  b: false,
  c: '',
  d: null,
  e: undefined
});

更新情報

として アンドレイ・ネキュラウ 指摘 このミキシンは元のオブジェクトに影響を及ぼしますが、元の compact アンダースコア・メソッド は配列のコピーを返します。 .

この問題を解決するために compactObject のような振る舞いをさせるために のように動作するようにします。 のように動作するようになりました。

_.mixin({
  compactObject : function(o) {
     var clone = _.clone(o);
     _.each(clone, function(v, k) {
       if(!v) {
         delete clone[k];
       }
     });
     return clone;
  }
});