JS如何筛选出id不在另一对象数组中出现的对应name值
代码问题说明
你原先的写法存在两处核心错误:
- 循环逻辑中每次都会覆盖
results变量,最终仅会保留object1最后一项的遍历结果 - 过滤对象错误:你对
object2执行过滤操作,但需求是从object1中筛选符合条件的元素
实现方案
推荐提前提取object2的所有id存入Set,后续查找效率为O(1),适合各种数据量场景:
// 提取object2的所有id const obj2IdSet = new Set(object2.map(item => item.id)); // 先过滤id不匹配的object1元素,再提取对应的name值 const targetNames = object1 .filter(item => !obj2IdSet.has(item.id)) .map(item => item.name);
针对你给出的示例数据,最终targetNames的输出结果为['name1', 'name3'],符合需求。
如果数据量很小,也可以不用提前提取Set,直接用some方法判断:
const targetNames = object1 .filter(item => !object2.some(obj2Item => obj2Item.id === item.id)) .map(item => item.name);
内容的提问来源于stack exchange,提问作者Ville
相关产品推荐
相关产品推荐

