js 计算多个数组的交集

3,059 阅读1分钟
let arr = [[1,2,3,4],[4,3],[4,3],[4,3]]

let b = arr.reduce((data,item)=>{
 return data.filter((i)=>{
   return item.some((j)=>{
     return i === j
    })
  })
})
console.log(b)//3,4
//如果其中有一个没有共同的数字,会返回一个空的数组
首先是把每个数组去重,然后将他们合并,合并后数组元素的个数等于原来的数组个数,这个元素就是数组的交集
function fn(...rest){
  for(let i=0;i<[...rest].length;i++){
      rest[i]=Array.from(new Set(rest[i]))
      
  }
 let arr1=[].concat(...rest)

  let x=[]
 for(let i=0;i<arr1.length-1;i++){
     let count=0;
     for(let j=1;j<arr1.length;j++){
          if(arr1[i]===arr1[j]){
              count++;
          }
          if(count===[...rest].length&&x.indexOf(arr1[i])<0){
           
              x.push(arr1[i])
              break;
          }
     }
 }
return x
}
console.log(fn([2,4],[4],[4,3]))