_.intersectionWith дает правильный результат, когда объекты сравнивают изменение порядка - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь использовать _.intersectionWith из библиотеки lodash, чтобы найти элемент пересечения между двумя массивами объектов.Это не работает.

var obj1 = [{'a':[],'b':'testobj'}]
var obj2 = [{'a':[],'b':'testobj'},{'a':[],'b':'testing'}]

_.intersectionWith(obj1, obj2)

ожидание [{'a':[],'b':'testobj'}], но фактическое значение []

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Как уже говорилось, вам не хватает функции comparator.Тот же самый пример в документации lodash .В вашем случае _. IsEqual сделает это глубокое сравнение для вас.

Вы можете добиться такого же точного результата с _. UniqBy , что несколько короче:

var obj1 = [{'a':[],'b':'testobj'}]
var obj2 = [{'a':[],'b':'testobj'},{'a':[],'b':'testing'}]

let result = _.uniqBy([...obj1, ...obj2], _.isEqual)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
0 голосов
/ 27 июня 2019

Метод _.intersectionWith() ожидает функцию, которая будет сравнивать элементы. В вашем случае вы можете использовать _.isEqual(), который выполняет глубокое сравнение между двумя значениями, чтобы определить, являются ли они эквивалентными:

const obj1 = [{'a':[],'b':'testobj'}]
const obj2 = [{'a':[],'b':'testobj'},{'a':[],'b':'testing'}]

const result = _.intersectionWith(obj1, obj2, _.isEqual)

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
...