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

在Angular/TypeScript中对比数组属性过滤数组的实现方法

在Angular/TypeScript中过滤未分配的任务数组

我来给你捋捋怎么实现这个需求,其实分两步就能搞定,而且还能兼顾性能:

首先,我们可以先把已经被分配的任务ID提取出来,存到一个Set里——这玩意儿查找起来特别快,比直接遍历数组高效多了。然后再用数组的filter方法,把tasks里ID不在这个集合里的元素挑出来就行。

具体实现步骤

1. 先给数据定义类型(TypeScript规范操作)

为了让代码更严谨,我们可以先给两个数组的元素定义接口:

interface Task {
  ID: number;
  Address: string;
  Latitude: number;
  Longitude: number;
}

interface AgentTask {
  ID: number;
  AgentID: number;
  TaskID: number;
}

2. 准备你的原始数据

const tasks: Task[] = [];
tasks.push({ ID: 1, Address: "---", Latitude: 312313, Longitude: 21312 });
tasks.push({ ID: 3, Address: "---", Latitude: 312313, Longitude: 21312 });

const agentTasks: AgentTask[] = [];
agentTasks.push({ ID: 2, AgentID: 2, TaskID: 1 });

3. 实现过滤逻辑

// 第一步:提取所有已分配的TaskID到Set中
const assignedTaskIds = new Set(agentTasks.map(agentTask => agentTask.TaskID));

// 第二步:过滤出未被分配的任务
const unassignedTasks = tasks.filter(task => !assignedTaskIds.has(task.ID));

// 输出结果就是你要的ID为3的任务
console.log(unassignedTasks);

为什么用Set而不是直接遍历?

如果你的agentTasks数组比较小,其实也可以用更简洁的写法:

const unassignedTasks = tasks.filter(task => 
  !agentTasks.some(agentTask => agentTask.TaskID === task.ID)
);

但这种写法每次过滤都要遍历一遍agentTasks数组,数据量大的时候性能会变差。而用Set的话,查找操作是O(1)的时间复杂度,整体效率会高很多,推荐在实际项目中用这个方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:19:09