用于单个键的多个值的Lodash过滤器



在Lodash过滤器中我们可以做

var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false }
];
_.filter(users, _.matches({ 'age': 36, 'active': true }));
// result { 'user': 'barney', 'age': 36, 'active': true }

但是我想做的是

_.filter(users, _.matches({ 'age': [36, 40] }));
// result
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred',   'age': 40, 'active': false }

var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false }
]
console.log( _.filter(users, _.matches({ 'age': 36, 'active': true })) )
// result 
// { 'user': 'barney', 'age': 36, 'active': true }
console.log( _.filter(users, _.matches({ 'age': [36, 40] })) )
// result
// { 'user': 'barney', 'age': 36, 'active': true },
// { 'user': 'fred',   'age': 40, 'active': false }
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

您可以尝试将年龄放入数组中,并检查它是否包含项目的age属性:

var users=[{user:"barney", age:36, active:!0}, {user:"fred", age:40, active:!1}, {user:"stackoverflow", age:12, active:!0}];
const validAges = [36, 40];
const result = _.filter(users, (o) => { return validAges.includes(o.age)})
console.log(result);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

或者你可以使用普通的Array#filter:

var users=[{user:"barney", age:36, active:!0}, {user:"fred", age:40, active:!1}, {user:"stackoverflow", age:12, active:!0}];
const validAges = [36, 40];
const result = users.filter(e => validAges.includes(e.age));
console.log(result);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>

最新更新