Разница и пересечение двух массивов, содержащих объекты

У меня есть два массиваlist1 а такжеlist2 которые имеют объекты с некоторыми свойствами;userId Идентификатор или уникальное свойство:

list1 = [
    { userId: 1234, userName: 'XYZ'  }, 
    { userId: 1235, userName: 'ABC'  }, 
    { userId: 1236, userName: 'IJKL' },
    { userId: 1237, userName: 'WXYZ' }, 
    { userId: 1238, userName: 'LMNO' }
]

list2 = [
    { userId: 1235, userName: 'ABC'  },  
    { userId: 1236, userName: 'IJKL' },
    { userId: 1252, us,erName: 'AAAA' }
]

Я ищу простой способ выполнить следующие три операции:

list1 operation list2 должен вернуть пересечение элементов:

[
    { userId: 1235, userName: 'ABC'  },
    { userId: 1236, userName: 'IJKL' }
]

list1 operation list2 должен вернуть список всех элементов изlist1 которые не встречаются вlist2:

[
    { userId: 1234, userName: 'XYZ'  },
    { userId: 1237, userName: 'WXYZ' }, 
    { userId: 1238, userName: 'LMNO' }
]

list2 operation list1 должен вернуть список элементов изlist2 которые не встречаются вlist1:

[
    { userId: 1252, userName: 'AAAA' }
]

Ответы на вопрос(6)

Ваш ответ на вопрос