条件にネストされた配列が含まれる場合、find
オブジェクトへの方法が表示されません。
var modules = [{
name: 'Module1',
submodules: [{
name: 'Submodule1',
id: 1
}, {
name: 'Submodule2',
id: 2
}
]
}, {
name: 'Module2',
submodules: [{
name: 'Submodule1',
id: 3
}, {
name: 'Submodule2',
id: 4
}
]
}
];
submodules
はオブジェクトではなく配列であるため、これは機能しません。この作業を行うための速記はありますか?配列を手動で繰り返すことを避けようとしています。
_.where(modules, {submodules:{id:3}});
ここに私が思いついたものがあります:
__.find(modules, _.flow(
_.property('submodules'),
_.partialRight(_.some, { id: 2 })
));
// → { name: 'Module1', ... }
_
flow() を使用すると、必要なことを行うコールバック関数を作成できます。呼び出すと、データが各関数を流れます。最初に必要なものはsubmodules
プロパティであり、 property() 関数を使用して取得できます。
次に、サブモジュール配列が some() に入力されます。これは、目的のサブモジュール、この場合はID _2
_を含む場合にtrueを返します。
最初に見つかったモジュールだけでなく、複数のモジュールを探している場合は、find()
をfilter()
に置き換えます。
Lodashを使用すると、次のようにネストされたデータ(配列を含む)をフィルタリングできます。
_.filter(modules, { submodules: [ { id: 2 } ]});
モジュールを取得するために、関数を使用するのが最善のチャンスだと思います。
_.select(modules, function (module) {
return _.any(module.submodules, function (submodule) {
return _.where(submodule, {id:3});
});
});
サブモジュールを取得するためにこれを試してください
。where(。pluck(modules、 "submodules")、{submodules:{id:3}});