値がtrueの場合にのみオブジェクトキー名を返すにはどうすればよいですか?
私はアンダースコアを使用していて、私が見る唯一のことは簡単にキーを返す方法です、私は可能な限り冗長な反復を避けたいです:
例:
Object {1001: true, 1002: false}
1001だけの配列が欲しい...
Object.keys オブジェクトからキーを取得し、次のことができます filter 値に基づいてキー
var obj = {1001: true, 1002: false};
var keys = Object.keys(obj);
var filtered = keys.filter(function(key) {
return obj[key]
});
2つの方法を使用して Lodash ライブラリで使用できる別の方法があります。
_.pickBy
_-オブジェクトのプロパティで構成されるオブジェクトを作成します。追加のパラメーター(述部)がない場合、返されるすべてのプロパティにはtruthy値が含まれます。_.keys(object)
-指定されたオブジェクトからキーの配列を作成しますしたがって、あなたの例では次のようになります:
_var obj = {1001: true, 1002: false};
var keys = _.keys(_.pickBy(obj));
// keys variable is ["1001"]
_
nderscore.js ライブラリを使用すると、非常によく似たものになります。 __.pick
_ および __.keys
_ 関数を使用する必要があります。唯一の違いは、__.pick
_には述語関数 __.identity
_ が必要であることです。
したがって、コードは次のようになります。
_var obj = {1001: true, 1002: false};
var keys = _.keys(_.pick(obj, _.identity));
// keys variable is ["1001"]
_
それが役に立てば幸い
フィルタリングとオブジェクトの繰り返し処理を組み合わせる場合は、通常 _.reduce
(スイスアーミーナイフの反復子):
var trues = _(obj).reduce(function(trues, v, k) {
if(v === true)
trues.Push(k);
return trues;
}, [ ]);
冗長性が低い:
return array.filter(item => {
return item.enabled === true;
});