Js数组的并集,交集,差集的实现

摘要:并集:以属于A或属于B的元素为元素的集合成为A与B的并(集);交集:以属于A且属于B的元素为元素的集合成为A与B的交(集)差集:以属于A而不属于B的元素为元素的集合成为A与B的差(集)

并集、交集、差集的概念

并集:以属于A或属于B的元素为元素的集合成为A与B的并(集)

交集:以属于A且属于B的元素为元素的集合成为A与B的交(集)

差集:以属于A而不属于B的元素为元素的集合成为A与B的差(集)


ES6的实现

现在有两个数组 arr1  和  arr2

let arr1 = [1,2,3,4,4]
let arr2 = [3,4,5,6,7]

1.数组的并集:

let union = new Set([...arr1,...arr2])

2.数组的交集

let intersect  = new Set([...arr1].filter(item => arr2.has(item)))

3. 数组的差集

let difference = new Set([...arr1].filter(item => !arr2.has(item)))


ES5的实现

交集

交集元素由既属于集合A又属于集合B的元素组成

Array.intersect = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.filter(function(v){ 
     return arr2.indexOf(v)!==-1
    })
  }
}
// 使用方式
Array.intersect([1,2,3,4], [3,4,5,6]); // [3,4]


并集

并集元素由集合A和集合B中所有元素去重组成

Array.union = function(arr1, arr2) {
  if(Object.prototype.toString.call(arr1) === "[object Array]" && Object.prototype.toString.call(arr2) === "[object Array]") {
    return arr1.concat(arr2).unique()
  }
}
// 使用方式
Array.union([1,2,3,4], [1,3,4,5,6]); // [1,2,3,4,5,6]


差集

A的差集:属于A集合不属于B集合的元素

B的差集:属于B集合不属于A集合的元素

Array.prototype.minus = function(arr) {
  if(Object.prototype.toString.call(arr) === "[object Array]") {
    var interArr = Array.intersect(this, arr);// 交集数组
    return this.filter(function(v){
      return interArr.indexOf(v) === -1
    })
  }
}
// 使用方式
var arr = [1,2,3,4];
arr.minus([2,4]); // [1,3]


本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://shenqiku.cn/article/FLY_4335