10

我有以下值数组:

[
   {
     id: 1,
     field: 'map'
   },
   {
     id: 2,
     field: 'dog'
   },
   {
     id: 3,
     field: 'map'
   }
]

我需要找出字段等于dog和的元素map。我知道我可以使用该_.filter方法并传递一个迭代器函数,但我想知道是否有更好的解决方案来解决这个问题,我可以传递搜索字段和可能的值。有人可以提供更好的方法吗?

编辑::

我可以使用以下方法:

_.where(array, {field: 'dog'})

但在这里我可能只检查一个子句

4

2 回答 2

21
_.filter(data, function(item){ return item.field === 'map' || item.field === 'dog'; })

如果你想创建一个接受的函数,fieldvalues看起来像这样:

function filter(data, field, values) {
    _.filter(data, function(item){ return _.contains(values, item[field]); })
}
于 2013-10-20T10:06:23.350 回答
8

只需将您的过滤条件作为第三个参数传递_.filter(list, predicate, [context]),然后将其设置为迭代器的context( ):this

var data = [
  { id: 1, field: 'map'   },
  { id: 2, field: 'dog'   },
  { id: 3, field: 'blubb' }
];

var filtered = _.filter(
  data,
  function(i) { return this.values.indexOf(i.field) > -1; },
  { "values": ["map", "dog"] } /* "context" with values to look for */
);

console.log(filtered);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

于 2013-10-20T10:13:13.013 回答