如何筛选未加入聊天的可用用户?(JavaScript数组操作)
解决方法
直接通过filter结合Set进行链式调用就能实现需求,而且效率更高(Set的查找是O(1),比数组includes的O(n)更适合数据量大的场景):
const result = availablеUsers.filter(user => !new Set(allUsers.map(u => u.id)).has(user.id) ); console.log(result); // 输出 [{id:1,name:'Dani'}]
思路说明
- 先用
allUsers.map(u => u.id)提取所有已加入聊天的用户ID,再转成Set集合(既避免重复ID干扰,又能提升查找速度) - 用
filter遍历availablеUsers,只保留ID不在上述Set里的用户
你之前用map+find得到含undefined的数组,是因为find找不到匹配项时会返回undefined,map会直接保留这个结果。其实不需要先单独生成已加入用户的数组,直接在过滤环节做判断就够了。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

