You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从L1中筛选出未包含L2全部元素的ID列表?

解决方法:找出未包含L2所有元素的ID

你的需求是筛选出L1中对应id的所有name未完全覆盖L2元素的id,原代码逻辑错误——它只是收集了那些单个name不在L2中的id,而非检查整个id对应的name集合是否包含L2的全部元素。

正确实现代码

let L1 = [
    { id: 1, name: 'Object 1' },
    { id: 1, name: 'Object 2' },
    { id: 1, name: 'Object 3' },

    { id: 2, name: 'Object 1' },
    { id: 2, name: 'Object 2' },
    
    { id: 3, name: 'Object 1' },
    { id: 3, name: 'Object 3' }  
];

let L2 = ['Object 1', 'Object 3'];

// 第一步:按id分组,收集每个id对应的所有name
const groupedById = L1.reduce((groups, item) => {
  if (!groups[item.id]) {
    groups[item.id] = new Set();
  }
  groups[item.id].add(item.name);
  return groups;
}, {});

// 第二步:筛选出未包含L2所有元素的id
const targetIds = Object.keys(groupedById).filter(id => {
  const names = groupedById[id];
  // 检查L2的每个元素是否都在当前id的name集合中
  return !L2.every(name => names.has(name));
}).map(Number); // 把字符串id转成数字

console.log(targetIds); // 输出:[2]

代码说明

  • 用reduce + Set按id分组,避免重复存储同一个name,提升检查效率
  • 用every方法验证L2的所有元素是否都存在于当前id的name集合中,取反后就是不符合要求的id
  • 最后把字符串类型的id转为数字,和原数据类型一致

内容的提问来源于stack exchange,提问作者Karim Ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:03:21