Сравнить два массива с объектами и удалить совпадения
Коллеги, прошу прощения за глупый вопрос, но сижу туплю не могу решить вопрос.
Есть два массива с объектами: let categories = [ {"id": 1, "title": "Комплектующие", "pid": null}, {"id": 2, "title": "Ноутбуки", "pid": null}, {"id": 3, "title": "Сумки под ноутбуки", "pid": 2}, {"id": 4, "title": "Сумки мужские", "pid": 3}, {"id": 5, "title": "Cумки мужские синие", "pid": 4}, {"id": 6, "title": "Жесткие диски", "pid":1}, {"id": 7, "title": "Кабеля", "pid":1}, {"id": 8, "title": "Кабеля HDMI", "pid": 7}, {"id": 9, "title": "Мониторы", "pid": null}, {"id": 10, "title": "Кабеля HDMI mini", "pid": 8}, {"id": 11, "title": "Сумки женские", "pid": 3}, {"id": 12, "title": "Сумки мужские синие с рюшечками", "pid": 5}, ]; let targets = [{"id": 7, "title": "Кабеля", "pid":1}, {"id": 8, "title": "Кабеля HDMI", "pid": 7}, {"id": 9, "title": "Мониторы", "pid": null},] Нужно сравнить массивы и удалить совпадения))))) Как сделать???? |
Роман Андреевич,
преобразовать обьекты в строки, отфильтровать, сделать из строк обьекты. |
рони, благодарю за помощь, а можно пример))))))))))))))
|
рони, щас попробую
|
let result = arrayTarget.filter((item) => { return JSON.stringify(arrayElements).indexOf(JSON.stringify(item)) === -1; }); вроде работает)))))))) |
Роман Андреевич,
let categories = [ {"id": 1, "title": "Комплектующие", "pid": null}, {"id": 2, "title": "Ноутбуки", "pid": null}, {"id": 3, "title": "Сумки под ноутбуки", "pid": 2}, {"id": 4, "title": "Сумки мужские", "pid": 3}, {"id": 5, "title": "Cумки мужские синие", "pid": 4}, {"id": 6, "title": "Жесткие диски", "pid":1}, {"id": 7, "title": "Кабеля", "pid":1}, {"id": 8, "title": "Кабеля HDMI", "pid": 7}, {"id": 9, "title": "Мониторы", "pid": null}, {"id": 10, "title": "Кабеля HDMI mini", "pid": 8}, {"id": 11, "title": "Сумки женские", "pid": 3}, {"id": 12, "title": "Сумки мужские синие с рюшечками", "pid": 5} ]; let targets = [{"id": 7, "title": "Кабеля", "pid":1}, {"id": 8, "title": "Кабеля HDMI", "pid": 7}, {"id": 9, "title": "Мониторы", "pid": null}] let arrTarget = targets.map(JSON.stringify); let arrOut = categories.map(JSON.stringify).filter(e => !arrTarget.includes(e)).map(JSON.parse); console.log(arrOut) |
Роман Андреевич,
а источник этих объектов кто? |
Ну ересь же, нельзя так делать.
И даже не из-за рекурсивных объектов. var a = {}; a.b = a; try{JSON.stringify(a)}catch(e){alert(e)} И не из-за объектов с иным порядком. var a = {}; var b = {}; a.c = 1; a.d = 2; b.d = 2; b.c = 1; alert(JSON.stringify(a) + '\n' + JSON.stringify(b)) А просто потому, что это мерзко: гонять туда-сюда сложные преобразования, вместо того чтоб написать лишних пару строк. |
laimas, источник БД, получаем основные категории а потом редактируем список (удаляем добавляем изменяем ...). Что то типа теста
|
Aetae, вообще нельзя такое делать. Просто стояла задача))))))))))))
|
Часовой пояс GMT +3, время: 03:59. |