原文:
js陣列操作:去重,交集,並集,差集
方法一:
function unique(arr)
方法二:
function unique(arr)
方法三:
function unique(arr)
a = [1, 2, 3]
b = [2, 4, 5]
方法一:
es7新增了乙個array.prototype.includes
的陣列方法,用於返回乙個陣列是否包含指定元素,結合filter方法
//並集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(b).filter(v => !a.includes(v) || !b.includes(v)) //
[1,3,4,5]
方法二:
es6中新增的乙個array.from
方法,用於將類陣列物件和可遍歷物件轉化為陣列。只要類陣列有length長度,基本都可以轉化為陣列。結合set結構實現數學集求解。
let aset = newset(a)
let bset = new
set(b)
//並集
let union = array.from(new set(a.concat(b))) //
[1,2,3,4,5]
//交集
let intersection = array.from(new set(a.filter(v => bset.has(v)))) //
[2]//
差集let difference = array.from(new set(a.concat(b).filter(v => !aset.has(v) || !bset.has(v)))) //
[1,3,4,5]
方法三:
es5可以利用filter和indexof進行數學集操作,但是,由於indexof方法中nan永遠返回-1,所以需要進行相容處理。
//並集var union =a.concat(b.filter(function(v) )) //
[1,2,3,4,5]
//交集
var intersection = a.filter(function(v)) //
[2]//
差集var difference = a.filter(function(v)).concat(b.filter(function(v))) //
[1,3,4,5]
var ahasnan = a.some(function(v))var bhasnan = b.some(function(v))
//並集
var union =a.concat(b.filter(function(v) )).concat(!ahasnan & bhasnan ? [nan] : ) //
[1,2,3,4,5]
//交集
var intersection = a.filter(function(v)).concat(ahasnan & bhasnan ? [nan] : ) //
[2]//
差集var difference = a.filter(function(v)).concat(b.filter(function(v))).concat(ahasnan ^ bhasnan ? [nan] : ) //
[1,3,4,5]
參考:
陣列去重 並集 交集 差集
一 去重 1 借助額外變數空間 es5 var arr 1,3,4,5,6,6,7,3,3,3 var newarr var obj function removeduplicates arr return newarr removeduplicates arr 1,3,4,5,6,7 2 不借助額...
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取陣列兩個陣列的交集 差集 並集 補集 去重
each是乙個集合迭代函式,它接受乙個函式作為引數和一組可選的引數 這個迭代函式依次將集合的每乙個元素和可選引數用函式進行計算,並將計算得的結果集返回 var b 1,2,3,4 each function x alert a alert b script param fn 進行迭代判定的函式 pa...