需求分析:如图所示有两个对象数组arr1和arr2,求arr1和arr2的交集.
var arr1 = [{ id: 1 }, { id: 2 }, { id: 3 }];
var arr2 = [{id: 1 }, {id: 2 }, {id: 3 }, { id: 4 }, { id: 5 },{id: 6}];
实现思路及代码如下:
var have = [] //定义一个空数组
arr2.forEach(el=>{
have.push(el.id) //将数组一与数组二用于对比的字段放到一个数组中
// have=[1,2,3,4,5,6]
})
然后就是用另一个数组使用filter来过滤满足条件的数据,返回一个新的数组,
使用indexOf来判断是否存在这个数据,没有的话返回-1有的话就返回位置,这里!=-1,表示检索有这个数据的
两者结合就是检索arr1中的id与arr2中相同的数据出来返回一个新的数组.间接实现数组对象的交集
var result = arr1.filter(function (e) {
return have.indexOf(e.id) != -1
})
console.log(result)
注:因为数组对象长度不了,没法直接通过遍历的方式求并集,所以借用了数组求交集的方法间接实现这个功能需求.