JavaScript:如何筛选出users数组含指定两个_id的数组元素?
筛选包含特定用户ID的数组元素解决方法
问题场景
给定如下结构的数组(已修正原代码的语法错误,比如未闭合的对象括号):
const data = [ { _id: "646231c54574e0e7ffc569e9", users: [ { _id: "6461ef44496eff14402778af", name: "Salman Khan" }, { _id: "6461f15bb4e0a6c7addc9fb0", name: "Yash Sharma" }, { _id: "646211fac7359b7ed8f27bcb", name: "abcd" } ] } ];
需要从中筛选出users数组同时包含两个特定_id值的元素。
解决方法
可以通过数组的filter、every和some方法组合实现需求:
- 先定义需要匹配的两个目标ID:
const targetIds = ['6461ef44496eff14402778af', '6461f15bb4e0a6c7addc9fb0'];
- 执行筛选逻辑:
const filteredResult = data.filter(item => { // 检查所有目标ID是否都存在于当前元素的users数组中 return targetIds.every(targetId => { return item.users.some(user => user._id === targetId); }); });
代码解释
filter:遍历原数组,只保留符合条件的元素every:确保所有目标ID都满足存在条件,只要有一个不满足就排除当前元素some:检查当前元素的users数组中是否存在匹配目标ID的用户对象
如果需要更直观的写法,也可以先提取当前元素的所有用户ID再检查:
const filteredResult = data.filter(item => { const userIds = item.users.map(user => user._id); return targetIds.every(id => userIds.includes(id)); });
两种写法都能得到符合要求的结果,前者无需额外生成ID数组,性能更优。
内容的提问来源于stack exchange,提问作者Yash Sharma
相关产品推荐
相关产品推荐

