我正在尝试编辑基于另一个数组的对象数组。
例如,这是我的对象数组:
var objs = [{
attending: 0, user: '123'
}, {
attending: 0, user: '456'
}, {
attending: 0, user: '789'
}];
这是我的阵列:
var arr = ['945', '456']
由于456
中存在arr
,我想从obj
中删除该对象。因此是最终的结果:
var objs = [{
attending: 0, user: '123'
}, {
attending: 0, user: '789'
}];
我已经尝试了omit
和pullByAll
,但没有运气:
var newObj = _.omit(obj, arr);
var newObj = _.pullAllBy(obj, arr, 'user');
使用Lodash
时,最好的方法是什么?我知道为此创建一个Javascript函数会非常简单,虽然我的应用程序要求经常这样做,所以有一个简单的Lodash函数是可以访问的。
答案 0 :(得分:2)
你可以使用原生的js方法来做到这一点。
var newObj = objs.filter(function(obj) {
return arr.indexOf(obj.user) != -1
});
如果您使用ES6则更简单
var newObj = objs.filter(obj => arr.indexOf(obj.user) != -1);
有this video非常好地解释了这个概念。
答案 1 :(得分:1)
使用普通的JS可以工作:
var newObj = objs.filter(function(obj) {
return arr.indexOf(obj.user) !== -1
})
答案 2 :(得分:1)
根据要求,它在lodash中:
var newObj = _.filter(objs, function(obj) {
return _.indexOf(arr, obj.user) !== -1;
});
我们可以争论普通js与lodash,直到母牛回家,但是1)问题要求lodash,以及2)如果objs或arr为null,则普通js答案将引发错误。
答案 3 :(得分:0)
我能够通过forEach()
和remove()
_(obj).forEach(function(value) {
_.remove(arr, {
user: value
});
});
答案 4 :(得分:0)