JS求陣列的交集 並集 差集

2021-09-12 01:35:40 字數 1971 閱讀 7399

現有兩個陣列

let a = [101,201,601]

let b = [201,301,801]

複製**

1.求交集(交集元素由既屬於集合a又屬於集合b的元素組成)

方法1

let intersection = a.filter(v => b.includes(v)) // [201]

複製**

方法2

let intersection = array.from(new set(a.filter(v=> new set(b).has(v))))

// [201]

複製**

方法3

let intersection = a.filter(v => new set(b).has(v))  // [201]

複製**

方法4

let intersection = a.filter(function(v) ) // [201]

複製**

過濾重複資料

如果陣列中存在重複資料,也可用下面的方法去重:

let a = [101,201,601,201]

let b = [201,301,801]

let intersection = a.filter(function(v) ).filter(function (e,i,c) ) // [201]

複製**

方法5

let intersection = 

a.foreach(function (item)

})}) // [201]

複製**

總結:如果陣列中有重複資料,方法1、3、4、5會有重複資料出現

2.求並集 (並集元素由集合a和集合b中所有元素去重組成)

方法1

let union = a.concat(b.filter(v=> 

)) // [101, 201, 601, 301, 801]

複製**

方法2

let union = array.from(new set(a.concat(b))) // [101, 201, 601, 301, 801]

複製**

方法3

let union = a.concat(b.filter(function(v) )) // [101, 201, 601, 301, 801]

複製**

總結:方法2寫法最簡單

3.求差集 (差集元素由集合a和集合b的並集減去集合a和集合b的交集)

方法1

let difference = a.concat(b).filter(v => !a.includes(v) || !b.includes(v)))  // [101, 601, 301, 801]

複製**

方法2

let difference = array.from(new set(a.concat(b).filter(

v => !new set(a).has(v) || !new set(b).has(v)

))) // [101, 601, 301, 801]

複製**

方法3

let difference = a.filter(function(v) ).concat(b.filter(function(v) )) // [101, 601, 301, 801]

複製**

總結:方法1寫法最優。indexof有個對nan返回-1的問題,用到的話需要注意。

go 求陣列的並集 交集 差集

集合的分類 並集 以屬於a或屬於b的元素為元素的集合成為a與b的並 集 交集 以屬於a且屬於b的元素為元素的集合成為a與b的交 集 差集 以屬於a而不屬於b的元素為元素的集合成為a與b的差 集 package main import fmt 求並集 func union slice1,slice2 ...

js陣列交集 並集 差集

1.利用filter indexof var arr1 1,2,3,4,5,6,7,8,9,nan arr2 1,3,5,nan var intersection arr1.filter function val console.log intersection 1,3,5 但這種方法針對是valu...

JS陣列求並集,交集和差集

es7 filter結合includes 並集 let union a.concat b.filter v a.includes v 1,2,3,4,5 交集 let intersection a.filter v b.includes v 2 差集 let difference a.concat ...