JS Сравнить два массива объектов и получить новый

У меня два массива в которых содержатся объекты.

allService = [{Name: "Услуга №1", Code: "1", Kind: "Услуга №1"}, {Name: "Услуга №2", Code: "2", Kind: "Услуга №2"}, {Name: "Услуга №6", Code: "6", Kind: "Услуга №6"}, {Name: "Услуга №3", Code: "3", Kind: "Услуга №3"}];
myService = [{Service: '2'}, {Service: '6'}, {Service: '1'}];

Подскажите пожалуйста, как мне из массива "allService" получить новый массив "notMyService" в котором будут все услуги за исключением тех что есть в массиве "myService". При условии, что значение Code из массива allService === значению Service из массива myService.

P.S. Т.е. "allService" это все услуги, "myService" это МОИ услуги, а мне надо получить массив "notMyService" который включает в себя НЕ МОИ услуги.

Заранее спасибо за помощь!


Ответы (2 шт):

Автор решения: wololo

Например, вот так:

let allService = [
    {Name: "Услуга №1", Code: "1", Kind: "Услуга №1"},
    {Name: "Услуга №2", Code: "2", Kind: "Услуга №2"},
    {Name: "Услуга №6", Code: "6", Kind: "Услуга №6"},
    {Name: "Услуга №3", Code: "3", Kind: "Услуга №3"}
];
let myService = [
    {Service: '2'},
    {Service: '6'},
    {Service: '1'}
];

let services = myService.map(elem => elem.Service);
let servicesSet = new Set(services);
let notMyService = allService.filter(elem => !servicesSet.has(elem.Code));
for (let serv of notMyService)
    console.log(serv.Code);

→ Ссылка
Автор решения: Lukas

let allService = [{Name: "Услуга №1", Code: "1", Kind: "Услуга №1"}, {Name: "Услуга №2", Code: "2", Kind: "Услуга №2"}, {Name: "Услуга №6", Code: "6", Kind: "Услуга №6"}, {Name: "Услуга №3", Code: "3", Kind: "Услуга №3"}];
let myService = [{Service: '2'}, {Service: '6'}, {Service: '1'}];

let notMyService = allService.filter(service => myService.every(item => item.Service !== service.Code));

console.log(notMyService);

→ Ссылка