Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.10.2018, 11:35
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

Сравнить два массива с объектами и удалить совпадения
Коллеги, прошу прощения за глупый вопрос, но сижу туплю не могу решить вопрос.

Есть два массива с объектами:

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},]


Нужно сравнить массивы и удалить совпадения))))) Как сделать????
Ответить с цитированием
  #2 (permalink)  
Старый 21.10.2018, 11:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Роман Андреевич,
преобразовать обьекты в строки, отфильтровать, сделать из строк обьекты.
Ответить с цитированием
  #3 (permalink)  
Старый 21.10.2018, 11:47
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

рони, благодарю за помощь, а можно пример))))))))))))))
Ответить с цитированием
  #4 (permalink)  
Старый 21.10.2018, 11:47
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

рони, щас попробую
Ответить с цитированием
  #5 (permalink)  
Старый 21.10.2018, 11:48
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

let result = arrayTarget.filter((item) => {

				return JSON.stringify(arrayElements).indexOf(JSON.stringify(item)) === -1;

			});


вроде работает))))))))
Ответить с цитированием
  #6 (permalink)  
Старый 21.10.2018, 11:55
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Роман Андреевич,
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)
Ответить с цитированием
  #7 (permalink)  
Старый 21.10.2018, 11:58
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Роман Андреевич,
а источник этих объектов кто?
Ответить с цитированием
  #8 (permalink)  
Старый 21.10.2018, 12:04
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,492

Ну ересь же, нельзя так делать.

И даже не из-за рекурсивных объектов.
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))

А просто потому, что это мерзко: гонять туда-сюда сложные преобразования, вместо того чтоб написать лишних пару строк.
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 21.10.2018, 12:05
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

laimas, источник БД, получаем основные категории а потом редактируем список (удаляем добавляем изменяем ...). Что то типа теста
Ответить с цитированием
  #10 (permalink)  
Старый 21.10.2018, 12:06
Профессор
Отправить личное сообщение для Роман Андреевич Посмотреть профиль Найти все сообщения от Роман Андреевич
 
Регистрация: 12.08.2016
Сообщений: 299

Aetae, вообще нельзя такое делать. Просто стояла задача))))))))))))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить два массива bohdantheone Общие вопросы Javascript 79 07.02.2018 10:04
Сравнить два двумерных массива victornalchik Элементы интерфейса 3 29.01.2018 22:52
сравнить два массива Роман Андреевич Общие вопросы Javascript 2 04.10.2017 14:12
Удалить данные с массива jeka123 Javascript под браузер 7 09.04.2014 16:42
как найти и удалить массив из массива? FRIE Общие вопросы Javascript 8 14.03.2011 15:48