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);