我正在尝试使用lodash lib中的_.intersectionWith查找两个对象数组之间的交集元素。这不起作用。
var obj1 = [{'a':[],'b':'testobj'}]
var obj2 = [{'a':[],'b':'testobj'},{'a':[],'b':'testing'}]
_.intersectionWith(obj1, obj2)
期望[{'a':[],'b':'testobj'}]
,但实际是[]
答案 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>