最近在开发一款客户管理平台,今天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循环,感觉并不是很理想,如果同学们有性能更好的方法,欢迎留言分享。