[TOC] >[success] # 两数组的差集 -- 总结 ~~~ 1.获取交集,即过滤出AB 两数组中只有A特有的元素 ~~~ >[info] ## 解决思路 ~~~ 1.使用filter set 和has作为条件,只要没有的即为差集 2.使用filter 和 some,some false表示没有一个相同,没有一个相同的就是差集 3.使用filter 和 indexOf 判断这个值是否存在 4. ~~~ >[danger] ##### set 和 has 作为条件 ~~~ const difference = (a,b)=>{ const sA = new Set(a); const sB = new Set(b); return [...sA].filter((v)=>!sB.has(v)) } console.log(difference([1, 2, 3], [1, 2, 4])) // [ 3 ] ~~~ >[danger] ##### filter 和 some ~~~ const difference1 = (a,b)=>{ // 都是一个系列some 换成includes indexOf return [...new Set(a.filter(v=>!b.some(val=>val===v)))] } console.log(difference1([1, 2, 3], [1, 2, 4])) // [ 3 ] ~~~ >[danger] ##### 过滤对象系列 * some ~~~ const difference1 = (a,b,fn)=>{ // 都是一个系列some 换成includes indexOf return [...new Set(a.filter(v=>!b.some(val=>fn(v,val))))] } console.log(difference1([{id:'1'},{id:'2'}], [{id:3}],(v,v1)=>v.id === v1.id)) // [ { id: '1' }, { id: '2' } ] ~~~ * findIndex ~~~ const differenceWith = (arr,val,com= (a,b)=>a===b) => arr.filter(a=>val.findIndex((b)=>com(a,b)) ===-1) log(differenceWith( [1, 1.2, 1.5, 3, 0], [1.9, 3, 0], (a, b) => Math.round(a) === Math.round(b) )) // [1, 1.2] log(differenceWith([1, 1.2, 1.3], [1, 1.3, 1.5])) // [1.2] ~~~