Фильтрация массива путем сравнения значения его свойства с другим массивом в angular / typescript - PullRequest
0 голосов
/ 09 марта 2020

У меня есть два массива

//1st one
tasks.push({ ID: 1, Address: "---", Latitude: 312313, Longitude: 21312 });
tasks.push({ ID: 3, Address: "---", Latitude: 312313, Longitude: 21312 });
//2nd one
agentTasks.push({ID:2,AgentID: 2,TaskID:1});

Теперь я хочу отфильтровать массив tasks, чтобы получить только те значения, которые не включены в массив agentTasks. Как и идентификатор задачи 1 включен в agentTasks, но 3 не включен. Поэтому я хочу только значение ID 3. Как я могу сделать это в angular / машинописи?

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Вы можете создать Установить всех TaskID из agentTasks, а затем использовать .filter() в массиве tasks, чтобы сохранить только те задачи, которые ID не выполняет. t существует в наборе TaskIds:

const tasks = [
  { ID: 1, Address: "---", Latitude: 312313, Longitude: 21312 },
  { ID: 3, Address: "---", Latitude: 312313, Longitude: 21312}
];
const agentTasks = [{ID:2,AgentID: 2,TaskID:1}];

const taskIds = new Set(agentTasks.map(({TaskID}) => TaskID));
const res = tasks.filter(({ID}) => !taskIds.has(ID));
console.log(res);
2 голосов
/ 09 марта 2020

В конечном итоге вы хотите использовать функцию массива filter.

Самый простой подход - это поиск в массиве agentTasks для каждого элемента в tasks. Это хорошо для небольших массивов, но неэффективно для больших массивов.

Вместо этого я бы создал Map из массива agentTasks, используя TaskID в качестве ключа. Затем вы можете отфильтровать tasks в зависимости от того, есть ли у них соответствующий ключ в Map.

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

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

const agentTasksMap = new Map(agentTasks.map(x => [x.TaskID, x]));
const filtered = tasks.filter(task => !agentTasksMap.has(task.ID));

console.log(filtered);

Редактировать: ответ с использованием Set лучше, так как вас не интересуют значения в Map в моем ответе - вы заботитесь только о существовании ключа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...