繁体   English   中英

JavaScript-过滤出两个数组并取出重复项

[英]JavaScript - Filter out two arrays and take out dupes

假设我有两个数组:

var sellersDatabase = [
  { name: 'Mark', start_date: '2017-06-27' },
  { name: 'Jane', start_date: '2017-06-27' }
];

var sellersAPICall = [
  { name: 'Mark', start_date: '2017-06-27' },
  { name: 'Joe', start_date: '2017-06-22' },
  { name: 'Steven', start_date: '2017-04-11' },
  { name: 'Jane', start_date: '2017-06-27' }
];

使用ES6或Lodash,如何获得未包含在第一个数组中的那些数组的差异? 是的,我已经尝试过lodash的difference()

因此,我的预期输出将是:

var toInsertIntoDB = [
  { name: 'Joe', start_date: '2017-06-22' },
  { name: 'Steven', start_date: '2017-04-11' }
];

这样做:

javascript const toInsertToDB = _.difference(sellersDatabase, sellersAPICall); console.log(toInsertToDB);

输出:

[{ "name": "Mark", "start_date": "2017-06-27" }, { "name": "Jane", "start_date": "2017-06-27" }]

(当我想要相反的时候)

由于您要比较的是对象数组而不是原始类型,因此请使用_.differenceBy() ,并指出应通过哪个属性比较对象。 此外, sellersAPICall数组应为第一个(引用数组)。

 var sellersDatabase = [ { name: 'Mark', start_date: '2017-06-27' }, { name: 'Jane', start_date: '2017-06-27' } ]; var sellersAPICall = [ { name: 'Mark', start_date: '2017-06-27' }, { name: 'Joe', start_date: '2017-06-22' }, { name: 'Steven', start_date: '2017-04-11' }, { name: 'Jane', start_date: '2017-06-27' } ]; var result = _.differenceBy(sellersAPICall, sellersDatabase, 'name'); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

如果要比较2个属性,则可以使用将两个值连接在一起的回调函数:

 var sellersDatabase = [ { name: 'Mark', start_date: '2017-06-27' }, { name: 'Jane', start_date: '2017-06-27' } ]; var sellersAPICall = [ { name: 'Mark', start_date: '2017-06-27' }, { name: 'Joe', start_date: '2017-06-22' }, { name: 'Steven', start_date: '2017-04-11' }, { name: 'Jane', start_date: '2017-06-27' } ]; var result = _.differenceBy(sellersAPICall, sellersDatabase, function(o) { return o.name + '-' + o.start_date; }); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM