初始条件
const arr1 = [1, 2, 3, 4, 5],
arr2 = [2, 3, 4, 5, 6];
交集:利用下标的方法去拿有相同的值
let arr3 = [...arr1, ...arr2];
let resultJiaoji = arr3.filter(function (item, index) {
return arr3.indexOf(item) != index;
});
//原理:从左到右,每个值都有一个下标,但是利用item去查下标。出现相同值后,下标会以第一次出现为准
·交集:如果 arr1 里面有的,arr2没有。利用下标去查,返回值就是-1。然后filter 的返回值为假,就不进入arr4
let arr4 = arr1.filter(item => arr2.indexOf(item) != -1);
// 上下方法一样
let arr4 = arr1.filter(function (item) {
return arr2.indexOf(item) != -1
});
console.log('交集', arr4);
差集:利用并集 - 交集的方法得到差集 原理跟上面一样
let arr5 = arr3.filter(function (item) {
return !arr4.includes(item);
});
差集:利用里面只有一个的情况,将里面的东西拿出来。
let rest = arr3.filter(function (item) {
return arr3.indexOf(item) == arr3.lastIndexOf(item);
});
注意:如果arr1 或 arr2 存在[1,2,2,3,4] 数组里面有相同的值,可以利用Set 或者之前讲过去重的方法,提前去掉重复的值。在进行运算。