我们有2个JavaScript对象列表。
var AList = [{id:1,name:"AA"},{id:2,name:"BB"},{id:3,name:"CC"},{id:4,name:"DD"},{id:5,name:"EE"},{id:6,name:"FF"}]
var BList = [{id:1,name:"AA"},{id:2,name:"BB"},{id:3,name:"CC"},{id:4,name:"DD"}]
我们需要从两个列表中消除重复项,并返回AList唯一的内容。(编号5和6)
我为此使用了通用的JavaScript实现,但是我想基于下划线实现更时尚的解决方案。
for(var i=0;i<AList.length;i++){
for(var j=0;j<fBList.length;j++){
if(AList[i] && fBList[j] && (AList[i].id == BList[j].id)){
delete AList[i];
}
}
}
var uniqueList= _.uniq(AList);
在删除重复项的列表完成之后,重复项所在的位置就存在空元素,因此我们需要使用它_uniq
来获得唯一的一组值。
_.difference(AList,BList)
不提供答案。
不幸的是,_.difference
确实使用严格的相等性,并且无法通过自定义的相等性回调来更改它。您仍然需要手动计算它:
AList = _.uniq(AList, _.property('id'));
BList = _.uniq(BList, _.property('id'));
var bIds = _.pluck(BList, "id");
_.filter(AList, function(el) { return !_.contains(bIds, el.id); })
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句