Lodash/underscoreを使用してこのオブジェクトから誤ったプロパティを除外するエレガントな方法はありますか? _.compact(array)
が配列から誤った要素を削除する方法に似ています
から
{
propA: true,
propB: true,
propC: false,
propD: true,
}
戻る
{
propA: true,
propB: true,
propD: true,
}
_.pick
が必要です。これは関数を引数として取り、その関数がtrueを返すキーのみを含むオブジェクトを返します。だからあなたはできる:
filtered = _.pick(obj, function(value, key) {return value;})
またはもっと簡潔に:
filtered = _.pick(obj, _.identity)
Lodash 4.0は、_.pick
関数を、プロパティの配列を取る_.pick
と、関数を取る_.pickBy
に分割しました。だから今は
filtered = _.pickBy(obj, function(value, key) {return value;})
または、_.pickBy
は2番目の引数としてデフォルトで_.identity
を使用するため、次のように記述できます。
filtered = _.pickBy(obj);
バニラのjavascriptオプションは次の2つです。
A.:オブジェクトのキーと delete
誤った値を持つキーを反復します。
_var obj = {
propA: true,
propB: true,
propC: false,
propD: true,
};
Object.keys(obj).forEach(key => {
if (!obj[key]) delete obj[key];
});
console.log(obj);
_
Object.keys()
およびArray.prototype.forEach()
を参照してください
B.:オブジェクトのキーを反復処理し、真の値を新しいオブジェクトに追加します。
_var obj = {
propA: true,
propB: true,
propC: false,
propD: true,
};
var filteredObj = Object.keys(obj).reduce((p, c) => {
if (obj[c]) p[c] = obj[c];
return p;
}, {});
console.log(filteredObj);
_
Lodashを使用している場合は、次のようなものをお勧めします。
var object = {
propA: true,
propB: true,
propC: false,
propD: true,
};
_.pick(object, _.identity);
// →
// {
// propA: true,
// propB: true,
// propD: true
// }
pick() 関数は、コールバックがtruthyを返すためのプロパティを含む新しいオブジェクトを生成します。したがって、各プロパティ値を返すだけなので、コールバックとして identity() 関数を使用できます。
Lodash 4以降、pickBy()を使用して、trueに等しい値のみを取得できます。
const active = _.keys(_.pickBy(object));