js怎么判断两数组之间有没有交集

有两个数组:数组1和数组2;
想实现的需求:判断数组2里有没有数组1的任意一项,有则true,无则false

let arr1 = [1,2,3,4,5,6];
let arr2 = [6,7,8,9,10,11];
let result = false;
for(item of arr1){
    if(arr2.includes(item)){
        result = true;
        break;
    }
}

有没有大佬有更好的写法

阅读 14k
3 个回答

var arr1 = [1,2,3,4,5,6];
var arr2 = [6,7,8,9,10,11];
var result = (arr1.length + arr2.length) !== Array.from(new Set([...arr1,...arr2])).length;

你的写法,时间复杂度为O(n * m)
如果你先用一个映射表把arr2的数据存起来,那时间复杂度会降低为O(m+n)

let map = arr2.reduce((r, i) => (r[i] = true, r), {})
let result = arr1.some(i => map[i])

数组1构建个map,然后判断数组2里面的值是否在map中

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题