// 原數(shù)組
? ? const serveralArr = [
? ? ? ? [1,2,4,5,23,3,2,2,4,3,5,5],
? ? ? ? [3,2,3,2,2,4,3,1,4,5,6],
? ? ? ? [3,2,4,3,2,4,1,2,5],
? ? ? ? [3,2,4,5,5,4,3,1,2,2],
? ? ? ? [3,2,23,3,4,1,3,4,5,5,4,3,1,2,2],
? ? ? ? [3,2,4,1,2,5,5,4,3,1,2,2],
? ? ? ? [3,2,4,25,5,4,3,1,2,2],
? ? ]
? ? // ES5 方法實現(xiàn)數(shù)學(xué)意義上的交集結(jié)果
? ? const intersectNoRepeatFirst = serveralArr => {
? ? ? ? let minArr = serveralArr[0]
? ? ? ? serveralArr.forEach(item => {
? ? ? ? ? ? if(item.length < minArr.length){
? ? ? ? ? ? ? ? minArr = item
? ? ? ? ? ? }
? ? ? ? })
? ? ? ? const result = []
? ? ? ? minArr.forEach(item => {
? ? ? ? ? ? serveralArr.forEach(j => {
? ? ? ? ? ? ? ? if(j.includes(item) && !result.includes(item)){
? ? ? ? ? ? ? ? ? ? result.push(item)
? ? ? ? ? ? ? ? }
? ? ? ? ? ? })
? ? ? ? })
? ? ? ? return result
? ? }
? ? // ES6 方法實現(xiàn)數(shù)學(xué)意義上的交集結(jié)果
? ? const intersectNoRepeatTwice = arrs => {
? ? ? ? return arrs.reduce(function(prev,cur){
? ? ? ? ? ? // return [...new Set(cur.filter((item)=>prev.includes(item)))]
? ? ? ? ? ? return Array.from(new Set(cur.filter((item)=>prev.includes(item))))
? ? ? ? })
? ? }
? ? // 輸出數(shù)學(xué)意義上的交集結(jié)果
? ? console.log(intersectNoRepeatFirst(serveralArr), intersectNoRepeatTwice(serveralArr)) // => (5)?[3, 2, 4, 1, 5]; (5)?[3, 2, 4, 5, 1]
? ? // ES5 方法實現(xiàn)有重復(fù)元素的交集結(jié)果
? ? const intersectRepeat = arr => {
? ? ? ? const result = []
? ? ? ? const tempArr = []
? ? ? ? arr.forEach(item => {
? ? ? ? ? ? const obj = {}
? ? ? ? ? ? item.forEach(j => {
? ? ? ? ? ? ? ? if(obj.hasOwnProperty(j)){
? ? ? ? ? ? ? ? ? ? obj[j] += 1
? ? ? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? ? ? obj[j] = 1
? ? ? ? ? ? ? ? }
? ? ? ? ? ? })
? ? ? ? ? ? tempArr.push(obj)
? ? ? ? })
? ? ? ? let arrr = tempArr[0]
? ? ? ? tempArr.forEach(item => {
? ? ? ? ? ? if(item.length < arrr.length){
? ? ? ? ? ? ? ? arrr = item
? ? ? ? ? ? }
? ? ? ? })
? ? ? ? const newOjb = {}
? ? ? ? Object.keys(arrr).forEach(item => {
? ? ? ? ? ? newOjb[item] = Math.min.apply(Math, tempArr.map(function(o) {return o[item]}))
? ? ? ? })
? ? ? ? Object.keys(newOjb).forEach(item => {
? ? ? ? ? ? if(newOjb[item]){
? ? ? ? ? ? ? ? for(let i = 0; i < newOjb[item]; i++){
? ? ? ? ? ? ? ? ? ? result.push(Number(item))
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? })
? ? ? ? return result
? ? }
? ? // 輸出有重復(fù)元素的交集結(jié)果
? ? console.log(intersectRepeat(serveralArr)) // => (9)?[1, 2, 2, 2, 3, 3, 4, 4, 5]