知识提要:对称差 (Symmetric Difference),数学上,两个集合的对称差分是只属于其中一个集合,而不属于另一个集合的元素组成的集合,例如:集合let A = [ 1, 2, 3]和let B = [ 2, 3, 4]的对称差分为A △ B = C = [ 1, 4]。 集合论中的这个运算相当于布尔逻辑中的异或运算。
创建一个函数 sym,输入两个或两个以上的数组作为参数,然后返回值为对称差分的数组
思路:设定两个数组 (例如:let A = [1, 2, 3],let B = [2, 3, 4])作为参数传入,返回对称差分数组(A △ B = C = [1, 4]),且数组中没有重复项。
function sym(...args) {
//子数组去重
const newArgs = args.map(item => Array.from(new Set(item)))
//每次处理两个数组(reduce()),即当前子数组(cur)和上一轮处理结果(prev)
return newArgs.reduce((prev, cur) => {
//将当前子数组与上一轮处理结果数组合并(concat())、排序(sort()) 并过滤(filter())
return prev.concat(cur).sort((a, b) => a - b).filter((item, index, arr) => {
//提取合并后无重复的值
return arr[index] !== arr[index + 1] && arr.indexOf(item) === index ? item : ''
})
})
}
sym([1, 1, 2, 5], [2, 2, 3, 5], [3, 4, 5, 5])
//return [1, 4, 5]