убрать пересечение в 2 массива в машинописи / JavaScript - PullRequest
1 голос
/ 31 января 2020

У меня есть 2 списка объектов с 2 полями:

let users1 = [{ name: 'barney',  uuid: 'uuid3'},
              { name: 'barney',  uuid: 'uuid1'},
              { name: 'barney',  uuid: 'uuid2'}];

let users2 = [{ name: 'joe',  uuid:'uuid5'},
              { name: 'joe',  uuid: 'uuid1'}, 
              { name: 'joe',  uuid: 'uuid2'}];

Я хочу удалить объекты внутри каждого списка с пересечением над uuid.

let users1 = [{ name: 'barney',  uuid: 'uuid3'}]; // object with uuid1 and uuid2 deleted
let users2 = [{ name: 'joe',  uuid:'uuid5'}];     // object with uuid1 and uuid2 deleted

в приведенном ниже коде я извлекаю uuids из списков obj и помещаю их в новый массив каждый

let a =[];  
let b = [];
a = users1.map(s => s.uuid); // uuids from list 1 ['uuid3', 'uuid1', 'uuid2']
b = users2.map(s => s.uuid); // uuids from list 2 ['uuid5', 'uuid1', 'uuid2']

, затем использую loda sh, чтобы получить пересечение:

let e = [];
e = _.intersection(a,b); // intersection = [uuid1, uuid2] 

мы можем использовать список e для удаления пользователей user1 и users2

, но тогда я не совсем уверен, как удалить

. , предложение или пример будут оценены?

1 Ответ

2 голосов
/ 31 января 2020

Удаление пересечения на самом деле находит разницу - используйте _.differenceBy(), чтобы отфильтровать каждого пользователя, найдя элементы с uuid, которого нет у другого пользователя:

const users1 = [{ name: 'barney',  uuid: 'uuid3'},
              { name: 'barney',  uuid: 'uuid1'},
              { name: 'barney',  uuid: 'uuid2'}];

const users2 = [{ name: 'joe',  uuid:'uuid5'},
              { name: 'joe',  uuid: 'uuid1'}, 
              { name: 'joe',  uuid: 'uuid2'}];
              
const user1n = _.differenceBy(users1, users2, 'uuid');
const user2n = _.differenceBy(users2, users1, 'uuid');

console.log(user1n);
console.log(user2n);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>
...