如何使用Lodash从基于另一个数组的数组中删除对象?

时间:2016-05-30 06:55:12

标签: javascript underscore.js lodash

我正在尝试编辑基于另一个数组的对象数组。

例如,这是我的对象数组:

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' 
}];

我已经尝试了omitpullByAll,但没有运气:

var newObj = _.omit(obj, arr);
var newObj = _.pullAllBy(obj, arr, 'user');

使用Lodash时,最好的方法是什么?我知道为此创建一个Javascript函数会非常简单,虽然我的应用程序要求经常这样做,所以有一个简单的Lodash函数是可以访问的。

5 个答案:

答案 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)

您可以使用Array的filterincludes方法来实现。

const array = (objs).filter((obj) => !arr.includes(obj.user))