Разница в двух массивах объектов с Lodash

#javascript #react-hooks #lodash

#javascript #реагирующие крючки #Lodash

Вопрос:

У меня есть следующий код внутри моего useEffect in ReactJS

 const A1 = [{id: 1, nome: "Ruan"}, {id: 2, nome: "Gleison"}]
const A2 = [{id: 2, nome: "Gleison"}, {id: 3, nome: "Geraldo"}]

const results = _.xor(A1A2);

console.log(results)
 

Логика lodash is _.xor заключается в том, чтобы вернуть разницу между двумя массивами, однако это не то, что происходит

Отдача, которую я получаю, выглядит следующим образом

 0: Object {id: 1, nome: "Ruan"}
1: Object {id: 2, nome: "Gleison"}
2: Object {id: 2, nome: "Gleison"}
3: Object {id: 3, nome: "Geraldo"}
 

Я ценю все усилия, чтобы помочь

Комментарии:

1. Это потому, что объекты не равны, даже если их содержимое одинаково, потому что они имеют разные адреса в памяти.

Ответ №1:

Вы можете использовать xorBy для указания свойства, используемого для сравнения:

 const A1 = [{id: 1, nome: "Ruan"}, {id: 2, nome: "Gleison"}]
const A2 = [{id: 2, nome: "Gleison"}, {id: 3, nome: "Geraldo"}]

const results = _.xorBy(A1, A2, 'id'); // or 'nome'

console.log(results) 
 <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script> 

Ответ №2:

Это потому, что объекты не равны, даже если их содержимое одинаково, потому что они имеют разный адрес в памяти.

Вы можете попробовать что-то вроде этого:

 const results = _.xor(A1.map(object=> JSON.stringify(object)), A2.map(object=> JSON.stringify(object))).map(item => JSON.parse(item));