数组交集并集差集
/*
1. 数组并集
concat方法
展开运算符
reduce
*/
const arr1 = [1, 3, 89, 20, 3, 6, 1, 47, 81, 6]
const arr2 = [1, 57, 89, 20, 1, 48, 83, 92, 489, 5, 2, 7]
const union = (firstArr, secondArr) => {
// (1)使用 concat 连接数组
// let newArr = firstArr.concat(secondArr)
// (2)使用 展开运算符
// let newArr = [...firstArr, ...secondArr]
// (3)使用reduce,先构成一个二维数组
let newArr = [arr1, arr2].reduce((acc, cur) => {
acc = acc.concat(cur)
return acc
},[])
newArr = [...new Set(newArr)]
return newArr
}
console.log('数组交集',union(arr1, arr2))
/*
2. 数组交集
(1)先将一个数组转成set结构,然后通过另一个数组使用filter方法和set的has实例方法来判断一个数组是否含有另一个数组的元素
(2)双重循环:arr1.filter(item => arr2.indexOf(item) !== -1)
arr1.filter(item => arr2.includes(item))
*/
const intersection = (arr1, arr2) => {
// (1)Array.prototype.filter and Set.prototype.has
arr1 = new Set(arr1)
let result = arr2.filter(item => arr1.has(item))
result = [...new Set(result)]
return result
}
console.log('数组交集',intersection(arr1, arr2))
/*
3. 数组差集
(1)先将一个数组转成set结构,然后通过另一个数组使用filter方法和set的has实例方法来判断一个数组是否含有另一个数组的元素
(2)双重循环:arr1.filter(item => arr2.indexOf(item) === -1)
arr1.filter(item => !arr2.includes(item))
*/
const differenceSet =(arr1, arr2) => {
// (1)Array.prototype.filter and Set.prototype.has
arr1 = new Set(arr1)
let result = arr2.filter(item => !arr1.has(item))
result = [...new Set(result)]
return result
}
console.log('数组差集', differenceSet(arr1, arr2))
数组相加
const arr1 = [1, 3, 1, '1', 4, 6, 3]
const arr2 = [1, 7, 9, 10, 3, 2, 4, 4, 1]
// 第一种方法: 使用 concat方法,set数据结构,展开运算符
function addArray(arr1, arr2, isRepeat) {
// 合并数组
let arr = arr1.concat(arr2)
// 去重操作
if (isRepeat) {
arr = [...new Set(arr)]
}
return arr
}
console.log('使用 concat方法,set数据结构,展开运算符', addArray(arr1, arr2, true))
// 第二种方法: 使用push方法,展开运算符
function addArray1(arr1, arr2, isRepeat) {
// 合并数组
let arr = []
arr.push(...arr1, ...arr2)
console.log(arr)
// 去重操作
if (isRepeat) arr = [...new Set(arr)]
return arr
}
console.log('使用push方法,展开运算符', addArray1(arr1, arr2))
使用 concat方法,set数据结构,展开运算符 [
1, 3, '1', 4, 6,
7, 9, 10, 2
]
使用push方法,展开运算符 [
1, 3, 1, '1', 4, 6,
3, 1, 7, 9, 10, 3,
2, 4, 4, 1
]
数组去重这里只使用了set数据结构去重,关于数组去重的更多方法可以参考我的这篇文章 数组去重
数组相减
const arr1 = [1, 2, 3, 5, 6, 7, 1, 2, 3]
const arr2 = [7, 8, 9, 1, 4, 7, 2, 6, 10]
// arr1 - arr2 ---> [3,5](去重)
// arr2 - arr1 --> [8,9,4,10](去重)
function subArray(arr1, arr2, isRepeat) {
let arr = []
arr1.forEach(element => {
if (!arr2.includes(element)) arr.push(element)
})
if (isRepeat) arr = [...new Set(arr)]
return arr
}
console.log(subArray(arr1, arr2, true))
console.log(subArray(arr2, arr1, true))
[ 3, 5 ]
[ 8, 9, 4, 10 ]