[英]How to remove an object from an array based on another array with 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'
}];
我已经尝试了omit
和pullByAll
但没有运气:
var newObj = _.omit(obj, arr);
var newObj = _.pullAllBy(obj, arr, 'user');
使用Lodash
最好的方法是什么? 我知道为此创建一个 Javascript 函数会非常简单,尽管我的应用程序需要经常执行此操作,因此拥有一个可访问的简单 Lodash 函数会很好。
您可以使用本机 js 方法来做到这一点。
var newObj = objs.filter(function(obj) {
return arr.indexOf(obj.user) != -1
});
如果您使用的是 ES6,那就更简单了
var newObj = objs.filter(obj => arr.indexOf(obj.user) != -1);
有这个视频很好地解释了这个概念。
正如所问,这是在 lodash 中:
var newObj = _.filter(objs, function(obj) {
return _.indexOf(arr, obj.user) !== -1;
});
我们可以争论纯 js 与 lodash 直到奶牛回家,但 1) 问题要求使用 lodash,2) 如果 objs 或 arr 为空,纯 js 答案将抛出错误。
使用普通的 JS 这将起作用:
var newObj = objs.filter(function(obj) {
return arr.indexOf(obj.user) !== -1
})
我能够通过结合forEach()
和remove()
来解决这个问题
_(obj).forEach(function(value) {
_.remove(arr, {
user: value
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.