我想统计一下部门人员登录数据。数据大概如下:
登录数据
{'张三','赵六','张三','张三','孙杨','周瑜','黄盖','黄盖','张卫健','黄盖1'}
部门人员数据
{'张三','李四','赵六','钱七','孙杨','周瑜','黄盖','诸葛亮','刘备'}
所以,该部门的登录数据为5
我想统计一下部门人员登录数据。数据大概如下:
登录数据
{'张三','赵六','张三','张三','孙杨','周瑜','黄盖','黄盖','张卫健','黄盖1'}
部门人员数据
{'张三','李四','赵六','钱七','孙杨','周瑜','黄盖','诸葛亮','刘备'}
所以,该部门的登录数据为5
可以先把两个Array变成Set,再遍历login set,检查登录用户是否在部门用户里面。
使用Set首先是为了去重,减少后序遍历检查次数,另外Set的has操作的复杂度一般来说是O(1)(取决于浏览器实现,不过一般都是基于哈希表)。
const departmentList = ['张三', '李四', '赵六', '钱七', '孙杨', '周瑜', '黄盖', '诸葛亮', '刘备']
const loginList = ['张三', '赵六', '张三', '张三', '孙杨', '周瑜', '黄盖', '黄盖', '张卫健', '黄盖1']
function check(departmentList, loginList) {
const departmentSet = new Set(departmentList)
const loginSet = new Set(loginList)
let count = 0
for (const x of loginSet) {
if (departmentSet.has(x)) {
count++
}
}
return count
}
console.log(check(departmentList, loginList)) // => 5
const logins = ["张三", "赵六", "张三", "张三", "孙杨", "周瑜", "黄盖", "黄盖", "张卫健", "黄盖1"];
const staffs = ["张三", "李四", "赵六", "钱七", "孙杨", "周瑜", "黄盖", "诸葛亮", "刘备"];
const allStaffs = new Set(staffs);
const count = new Set(logins.filter(it => allStaffs.has(it))).size;
staffs 生成 Set 的目的是为了方便查找,直接用数组,通过 find
或者 includes
查找也是可以的。
然后遍历 logins
,把能从 staffs
中找到的那些留下,其他的剔掉。可以使用 filter
完成。
剩下的就是去重,用 Set
就能去重。如果需要列表,[...setObj]
就能拿到数组,但是只需要数量,直接取 size
就好了。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决