2016-02-19 3 views
0

У меня есть два массива с объектами:JS: Сравнить объекты массивов и удаления дубликатов

var oldUsers = [{"name": "Sam", "ext": 12}, {"name": "John", "ext": 15}]; 
var newUsers = [{"name": "John", "ext": 15}, {"name": "Jim", "ext": 19}]; 

Теперь я хочу, чтобы удалить объекты из обоих массивов, которые в обоих массивах. В этом примере я пытаюсь удалить {"name": "John", "ext": 15} из обоих массивов. Оба массивы, содержащие 200 или более объектов, и в конце концов, мне нужно обрабатывать объекты, которые не удаляются, так что в конце концов, мои массивы должны выглядеть следующим образом:

var oldUsers = [{"name": "Sam", "ext": 12}]; 
var newUsers = [{"name": "Jim", "ext": 19}]; 

Кто-нибудь из вас есть идея как решить эту проблему, например, путем перебора массивов? Мне нужно сравнить массивы с большим количеством объектов, а затем удалять повторяющиеся записи с помощью splice() или что-то подобное из обоих массивов.

Заранее благодарен!

+0

Это будет довольно неэффективно, вам придется начать с сравнения каждого объекта в одном массиве с каждым объектом в другом массиве. И вы не можете использовать '==' или '===' для сравнения, так как они всегда будут возвращать false при сравнении разных объектов. Таким образом, вам также нужна функция сравнения, чтобы перебирать свойства каждого объекта, чтобы увидеть, обладает ли тот же объект свойствами и теми же значениями. Попросите, что вы попробуете. – RobG

ответ

0

Лучше создать набор ключей (например, построенный как "<name>:<ext>", в зависимости от того, что уникально) для всех элементов, найденных в одном массиве, и пересечь другой массив, проверяющий наличие. Затем запустите ту же самую вещь для массивов «swapped».

Смежные вопросы