javascript - lodash:通过另一个 JSON 对象过滤对象数组

标签 javascript arrays json underscore.js lodash

我正在尝试使用 lodash 通过另一个 JSON 对象过滤对象数组。

var users = [
  { 'user': 'barney', 'name': "donald", 'active': true },
  { 'user': 'joe', 'name': "john", 'active': false },
  { 'user': 'fred', 'name': "peri", 'active': false },
  { 'user': 'fred', 'name': "aru", 'active': false },
  { 'user': 'fred', 'name': "teena", 'active': false },
  { 'user': 'fred', 'name': "nill", 'active': false },
  { 'user': 'fred', 'name': "duck", 'active': false },
  { 'user': 'barney', 'name': "resaj", 'active': false },
  { 'user': 'pebbles', 'name': "jee",  'active': true }
];

另一个 json 对象:

var searchParams = { 'user': 'ba', 'name': "don"}

如果第一个数组对象的用户包含第二个对象的用户,并且第一个对象名称包含第二个对象名称,而不是我想要的对象。我尝试了此代码,但它返回的是 OR 条件而不是 AND 条件。

_.filter(users, function(o) {
                    var checkFlag = false;
                    _.forOwn(searchParams, function(v,k) {
                        if(_.includes(o[k],v)){
                            checkFlag = true;
                            return false;
                        }
                    });
                    return checkFlag;
                });

这将返回以下结果

[{ 'user': 'barney', 'name': "donald", 'active': true },{ 'user': 'barney', 'name': "resaj", 'active': false }]

我只想要第一个对象{ 'user': 'barney', 'name': "donald", 'active': true } 任何帮助将不胜感激。任何想法

最佳答案

您的问题是,在 _.forOwn 的 iteratee 函数中,如果只有用户或名称字段之一产生匹配,则整个用户对象被视为匹配。

为了产生预期的结果,您可以实现映射缩减。将您的代码替换为以下代码(此代码段使用 lodash):

_.filter(users, function(o) {
    return _.map(searchParams, function(v,k) {
      return _.includes(o[k],v)
    }).reduce(function(isMatch, keyValueMatch){
      return isMatch && keyValueMatch
    }, true);
});

在这种情况下,_.map 将检查每个用户并提供一个数组或 bool 值,告诉您 searchParams 中的键值对是否匹配。减少部分将把 bool 数组聚合成单个 true 或 false。要得到 true,searchParams 中的所有键值对都必须生成 true 值。否则,reduce 部分将为该用户返回 false,这意味着他们被过滤掉。

关于javascript - lodash:通过另一个 JSON 对象过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44470276/

相关文章:

ruby-on-rails - 值未存储在 ruby​​ on rails 数组中

json - RavenDB 和小写 json 序列化 - 执行查询时出现问题

php - 将选择元素值推送为 json

javascript - 配对锦标赛设计算法

javascript - 带有旋转文本的 float 条形图xaxis标签-90对齐问题

javascript - 未捕获的类型错误 : Cannot call a class as a function in react and redux

javascript - 检查给定的字符串是否为日期对象

javascript - 修改 for 循环

php - 遍历具有重复记录的 PHP 数组并删除值 = 0 的一条记录

javascript - 在 json 文件中定义日期