方式一
let arr1 = [1, 2, 3, 4, 5]
arr2 = [5, 6, 7, 8, 9]
//求出数组的交集
let intersection = arr1.filter((item) => arr2.indexOf(item) > -1)
//求出数组的并集
let union = arr1.concat(arr2.filter((item) => arr1.indexOf(item) === -1))
//求数组的补集
let complement = arr1.filter((item) => arr2.indexOf(item) === -1)
.concat(arr2.filter((item) => arr1.indexOf(item) === -1))
//求数组的补差集
//找出数组arr2在arr1没有的值
let subtraction = arr1.filter((item) => arr2.indexOf(item) === -1)
console.log(intersection) //输出 [5]
console.log(union) //输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(complement) //输出 [1, 2, 3, 4, 6, 7, 8, 9]
console.log(subtraction) //输出 [1, 2, 3, 4]
解析:
//求出数组的并集 let union = arr1.concat(arr2.filter((item) => arr1.indexOf(item) === -1))
我看题的思路是从里往外走,先看 arr1.indexOf(item) === -1
indexOf中的item就是arr2,可以把它想象为
arr1.indexOf(arr2) === -1 或者 arr1.indexOf( arr2=[5,6,7,8,9]) === -1
indexOf()方法:当有我们要找的值,会返回给我们那个值的位置,如果没有就会返回-1
arr1中没有arr2的哪些值? 是不是没有[6,7,8,9]
arr1.indexOf(item) === -1 那我们这个条件就成立了 ,(注意indexOf()的方法 )
当 arr1.indexOf(item) === -1 这个运算完成把返回值返回给 arr2
arr1.concat(arr2)把arr2合并成一个新数组
方式二:取反
let arr1 = [1, 2, 3, 4, 5]
arr2 = [5, 6, 7, 8, 9]
//求出数组的交集
let intersection = arr1.filter((item) => arr2.indexOf(item) > -1)
//求出数组的并集
let union = arr1.concat(arr2.filter((item) => !(arr1.indexOf(item) > -1)))
//求数组的补集
let complement = arr1.filter((item) => !(arr2.indexOf(item) > -1))
.concat(arr2.filter((item) => !(arr1.indexOf(item) > -1)))
//求数组的补差集
//找出数组arr2在arr1没有的值
let subtraction = arr1.filter((item) => !(arr2.indexOf(item) > -1))
console.log(intersection) //输出 [5]
console.log(union) //输出 [1, 2, 3, 4, 5, 6, 7, 8, 9]
console.log(complement) //输出 [1, 2, 3, 4, 6, 7, 8, 9]
console.log(subtraction) //输出 [1, 2, 3, 4]
各位大佬我是个新手 ,理解不对的地方请多多指教