Considérez cet exemple. J'utilise Lodash
'data': [
{
'category': {
'uri': '/categories/0b092e7c-4d2c-4eba-8c4e-80937c9e483d',
'parent': 'Food',
'name': 'Costco'
},
'amount': '15.0',
'debit': true
},
{
'category': {
'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
'parent': 'Food',
'name': 'India Bazaar'
},
'amount': '10.0',
'debit': true
},
{
'category': {
'uri': '/categories/d6c10cd2-e285-4829-ad8d-c1dc1fdeea2e',
'parent': 'Food',
'name': 'Sprouts'
},
'amount': '11.1',
'debit': true
},
Quand je fais
_.filter(summary.data, {'debit': true})
Je récupère tous les objets.
ce que je veux?
Je veux tous les objets où category.parent == 'Food'
, Comment puis je faire ça?
J'ai essayé
_.filter(summary.data, {'category.parent': 'Food'})
et j'ai
[]
_.filter(summary.data, function(item){
return item.category.parent === 'Food';
});
lodash autorise les définitions d'objet imbriqué:
_.filter(summary.data, {category: {parent: 'Food'}});
À partir de la version 3.7.0, lodash permet également de spécifier des clés d'objet dans des chaînes:
_.filter(summary.data, ['category.parent', 'Food']);
Exemple de code dans JSFiddle: https://jsfiddle.net/6qLze9ub/
lodash prend également en charge la nidification avec des tableaux; si vous souhaitez filtrer sur l'un des éléments du tableau (par exemple, si category est un tableau):
_.filter(summary.data, {category: [{parent: 'Food'}] });
Si vous avez vraiment besoin d'une comparaison personnalisée, vous devez alors passer une fonction:
_.filter(summary.data, function(item) {
return _.includes(otherArray, item.category.parent);
});
à partir de v3.7.0
vous pouvez le faire de cette façon:
_.filter(summary.data, 'category.parent', 'Food')
_.where(summary.data, {category: {parent: 'Food'}});
Devrait faire le tour aussi
Dans lodash 4.x, vous devez effectuer les tâches suivantes:
_.filter(summary.data, ['category.parent', 'Food'])
(notez le tableau qui entoure le deuxième argument).
Ceci équivaut à appeler:
_.filter(summary.data, _.matchesProperty('category.parent', 'Food'))
Voici les docs pour _.matchesProperty
:
// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']