如何使用过滤器时,我有嵌套的对象?

考虑一下这个例子,我正在使用 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
},

等我找到的时候

_.filter(summary.data, {'debit': true})

我把所有的东西都拿回来。

我想要什么

我想所有的对象在 category.parent == 'Food',我怎么能做到这一点?

我尽力了

_.filter(summary.data, {'category.parent': 'Food'})

然后

[]
95862 次浏览
_.filter(summary.data, function(item){
return item.category.parent === 'Food';
});

Loash 允许嵌套对象定义:

_.filter(summary.data, {category: {parent: 'Food'}});

在3.7.0版本中,loash 还允许在字符串中指定对象键:

_.filter(summary.data, ['category.parent', 'Food']);

JSFiddle 中的示例代码: https://jsfiddle.net/6qLze9ub/

Loash 还支持数组嵌套; 如果希望对数组项之一进行过滤(例如,如果 type 是一个数组) :

_.filter(summary.data, {category: [{parent: 'Food'}] });

如果你真的需要一些自定义的比较,这就是传递函数的时候:

_.filter(summary.data, function(item) {
return _.includes(otherArray, item.category.parent);
});
_.where(summary.data, {category: {parent: 'Food'}});

应该也可以

v3.7.0开始,你可以这样做:

_.filter(summary.data, 'category.parent', 'Food')

在 loash 4.x 中,你需要做的是:

_.filter(summary.data, ['category.parent', 'Food'])

(注意包围第二个参数的数组)。

这相当于呼叫:

_.filter(summary.data, _.matchesProperty('category.parent', 'Food'))

以下是 _.matchesProperty 的文件:

// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']