Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Lodash过滤器过滤多个条件?_Javascript_Filter_Lodash - Fatal编程技术网

Javascript 如何使用Lodash过滤器过滤多个条件?

Javascript 如何使用Lodash过滤器过滤多个条件?,javascript,filter,lodash,Javascript,Filter,Lodash,我想从集合中筛选两个obj,即conditionArr从服务器获取,因此这是不可预测的 我的代码是: var users = [{ user: 'barney', age: 36, active: true }, { user: 'fred', age: 40, active: false }, { user: 'travis', age

我想从集合中筛选两个obj,即conditionArr从服务器获取,因此这是不可预测的

我的代码是:

var users = [{
        user: 'barney',
        age: 36,
        active: true
    },
    {
        user: 'fred',
        age: 40,
        active: false
    },
    {
        user: 'travis',
        age: 37,
        active: true
    }
];

// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
    user: 'barney'
}, {
    user: 'fred'
}];

// _.filter
result = _.filter(users, conditionArr);
 // expect results:
 [{
         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
    },
    {
        user: 'travis',
        age: 37,
        active: true
    }
];

// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
    user: 'barney'
}, {
    user: 'fred'
}];

// _.filter
result = _.filter(users, conditionArr);
 // expect results:
 [{
         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
    },
    {
        user: 'travis',
        age: 37,
        active: true
    }
];

// the Array fetch from Server, so it's unpredictable.
var conditionArr = [{
    user: 'barney'
}, {
    user: 'fred'
}];

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


我找到了一个更好的方法:

result =  _.map(conditionArr, (con) => ({
    ...con,
   ...(_.find(users, { user: con.user })),
}))
thx…

只需使用array.filter:

var用户=[
{用户:'barney',年龄:36岁,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
];
var result=users.filter(({user})=>user=='barney'| | user=='fred');

控制台日志(结果)
如果必须使用lodash来实现这一点,您可以使用与array.filter相同的方法来实现

_.filter(users, ({user}) => user === 'barney' || user === 'fred');
在方法中,您需要像下面的示例一样传递函数

_.filter(users, function(o) { return !o.active; });
var用户=[{
用户:“barney”,
年龄:36岁,
主动:正确
},
{
用户:“fred”,
年龄:40,,
活动:错误
},
{
用户:“travis”,
年龄:37岁,
主动:正确
}
];
//_u.过滤器
var result=u.filter(用户,函数(obj){return obj.user=='barney'| | obj.user=='fred'});
console.log(结果)
像使用本地js一样-

let userSubset = users.map(function(obj, index) {

   if (obj.user === "barney" || obj.user === "fred") return obj;
}).filter(Boolean);

console.log(userSubset);

// {user: "barney", age: 36, active: true}
// {user: "fred", age: 40, active: false}
使用:

const users=[{“user”:“barney”,“age”:36,“active”:true},{“user”:“fred”,“age”:40,“active”:false},{“user”:“travis”,“age”:37,“active”:true});
const conditionArr=[{“user”:“barney”},{“user”:“fred”}];
const result=u.intersectionBy(用户,条件arr,'user');
控制台日志(结果)

与许多其他lodash函数一样,filter将函数作为第二个参数(数组中的每个元素都作为参数),如果函数返回true,则该元素将保留在结果中

var用户=[
{用户:'barney',年龄:36岁,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
];
//阵列从服务器获取,因此不可预测。
变量条件arr=[
{用户:'barney'},
{用户:'fred'}
];
//简化了一点条件。cond=['barney','fred'];
var cond=uu.map(conditionArr,cond=>cond.user);
//_u.过滤器
var result=\.filter(用户,用户=>\.indexOf(cond,用户,用户)!=-1);
console.log('result',result)

非常酷!不幸的是,我的lodash版本太旧了。但我会看看我是否可以基于此编写自己的函数@Sampgun-我在答案中添加了一个ES6
intersectionBy
。酷!实际上我也不能用ES6