72

考虑这个例子。我正在使用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'})

并得到

[]
4

5 回答 5

162

lodash 允许嵌套对象定义:

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

从 v3.7.0 开始,lodash 还允许在字符串中指定对象键:

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

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

lodash 还支持与数组嵌套;如果要过滤数组项之一(例如,如果 category 是数组):

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

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

_.filter(summary.data, function(item) {
  return _.includes(otherArray, item.category.parent);
});
于 2014-04-25T18:30:49.917 回答
48
_.filter(summary.data, function(item){
  return item.category.parent === 'Food';
});
于 2013-06-13T22:27:40.477 回答
12

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

_.filter(summary.data, 'category.parent', 'Food')
于 2015-10-12T13:20:54.887 回答
3
_.where(summary.data, {category: {parent: 'Food'}});

也应该做的伎俩

于 2014-12-17T14:02:11.073 回答
3

在 lodash 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']
于 2016-11-15T20:21:29.397 回答