_.intersectionWith确实在对象比较顺序更改时给出正确的结果

时间:2019-06-27 18:15:37

标签: lodash

我正在尝试使用lodash lib中的_.intersectionWith查找两个对象数组之间的交集元素。这不起作用。

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

_.intersectionWith(obj1, obj2)

期望[{'a':[],'b':'testobj'}],但实际是[]

2 个答案:

答案 0 :(得分:0)

_.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>

答案 1 :(得分:0)

如上所述,您缺少comparator函数。 lodash documentation中实际上是相同的示例。就您而言,_.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>