我正在尝试使用Lodash intersectWith
通过某个属性交叉2个对象数组。
例如:
var objects = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
// Intersect by objects with the same value for 'x'
_.intersectionWith(objects, others, (obj, oth) => obj.x === oth.x);
这样做,我只得到了一个对象的意外结果:
[{ x: 1, y: 1 }]
而不是整个第一个数组:
[{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]
由于某种原因,intersectionWith
函数似乎只根据被比较的属性返回唯一结果。
任何人都可以解释为什么会这样吗?
答案 0 :(得分:1)
关于_.intersection的Lodash文档:
上的Lodash文档创建一个包含在所有给定数组中的唯一值数组,使用SameValueZero进行相等比较。
此方法与_.intersection类似,只是它接受比较器,该比较器被调用以比较数组的元素。
这意味着您的比较器确定值的唯一性。通过仅比较x,您可以根据自定义比较器使所有对象实际上相同。
答案 1 :(得分:0)
也许你错过了_.intersection
的一部分:
使用SameValueZero创建一个包含在所有给定数组中的 唯一值 数组,以进行相等比较。结果值的顺序和引用由第一个数组确定。 NS的[ 重点 ]
这意味着,如果您检查的值为x: 1
,则结果集中不会再包含具有此值的对象。