使用js求多个数组之间的相同值

183 阅读1分钟

最近在开发一款客户管理平台,今天PM有这样一个需求,在表格中一次勾选多条客户,(表格中的每个客户已经预先绑定了0或多个客服人员),需要勾选客户后,得到所有客户中共有的客服id,然后做一些业务操作。

可是后端同学给的接口,返回的数据一直都不对(偷笑),我当时正忙着写前端交互,也没认真想,下班回到家自己思考了一下,代码如下:

// 这里列入4个数组,姑且想象成经数据库查询而来的数据,每个客户(arr1、arr2...)都对应着不同数量的客服id
var arr1 = [1, 2, 4]
var arr2 = [2, 3, 4]
var arr3 = [0, 2, 5, 4, 6]
var arr4 = [8, 2, 4, 7, 1]

// 把客户2、3、4合并成一个二维数组
var arrs = [arr2, arr3, arr4]

var result = []

// 这里以客户1为基数进行比较
for (var i = 0; i < arr1.length; i++) {
    var temp = []
    for (var j = 0; j < arrs.length; j++) {
        for (var n = 0; n < arrs[j].length; n++) {
            if (arr1[i] === arrs[j][n]) {
                temp.push(arr1[i])
                //加个break提升性能哦!
                break 
            }
        }
    }
    if (temp.length === arrs.length) {
        result.push(arr1[i])
    }
}
console.log(result) // [2, 4]

以上代码还可以再优化,比如可以挑length最短数组为比较基数。

但这里用到了3次for循环,感觉并不是很理想,如果同学们有性能更好的方法,欢迎留言分享。