【问题标题】:How to filter the array of objects如何过滤对象数组
【发布时间】:2016-06-15 10:39:29
【问题描述】:

我有这样的对象数组

var users = [
  { 'user': 'barney',  'age': 36, 'active': true , 'company':'abc' },
  { 'user': 'fred',    'age': 40, 'active': false, 'company':'pqr' },
  { 'user': 'pebbles', 'age': 1,  'active': true,  'company':'xyz' }
];

我想过滤 company 是 abc 或 xyz 的对象数组,所以结果应该是这样的

[
  { 'user': 'barney',  'age': 36, 'active': true , 'company':'abc' },
  { 'user': 'pebbles', 'age': 1,  'active': true,  'company':'xyz' }
];

我正在使用这样的加载器

console.log(_.filter(users, {'company': 'xyz','company': 'abc'}))

过滤不正确。谁能帮我解决这个问题。

【问题讨论】:

标签: arrays underscore.js lodash


【解决方案1】:

只需使用默认语法,这应该可以工作

  _.filter(users, function(user) { return user.company == 'abc' || user.company == 'xyz'; });

你的代码一开始就不能工作的简短原因

_.filter(users, {'company': 'xyz','company': 'abc'})

是因为您传递了一个具有重复属性名称 company 的 javascript 对象,因此值为 abc 的第二个属性会覆盖第一个属性。这意味着您实际上正在这样做

_.filter(users, {'company': 'abc'})

然后这个对象{'company': 'abc'} 将被传递给_.matches 以产生一个函数,然后这个函数将验证数组的每个元素。

  var predicate = _.matches({'company': 'abc'});
  predicate( { 'user': 'barney',  'age': 36, 'active': true , 'company':'abc' }); // true
  predicate(  { 'user': 'fred',    'age': 40, 'active': false, 'company':'pqr' }); // false
  predicate(    { 'user': 'pebbles', 'age': 1,  'active': true,  'company':'xyz' }); // false

只返回巴尼。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2020-01-27
    • 2022-12-12
    • 2021-04-23
    相关资源
    最近更新 更多