使用lodash,我想找出两个不同的数组之间的所有元素,基本上是_.intersection[with|by]的相反或相反。当然,我回顾了_.difference[with|by],但它不是_.intersection的反向版本,因为它只比较第一个数组和第二个数组,而不是将它们相互比较。我能得到的最接近的是非常复杂的,这促使我在这里问,我是否错过了一个更有效和/或更优雅的选择。我只对基于lodash的解决方案感兴趣。
这是我能想到的最接近的方法,可以得到两个数组中不同值的唯一数组。我感兴趣的是具有不在数组中的id属性的值,以及具有匹配的id属性但不同v属性的值。
const n = [{id: 0, v: 9.7}, {id: 1, v: 1.7}, {id: 3, v: 2.6}, {id: 4, v: 1.89}]
const o = [{id: 1, v: 1.7}, {id: 3, v: 3.6}, {id: 7, v: 0.89}, {id: 4, v: 1.89}]
_.uniqBy(_.concat(
_.differenceWith(n, o, _.isEqual), _.differenceWith(o, n, _.isEqual)), 'id')该代码将生成:
[{id: 0, v: 9.7}, {id: 3, v: 2.6}, {id: 7, v: 0.89}]发布于 2020-05-13 10:20:46
我在寻找相同的东西后发现了这个问题,但后来我意识到,对于我的用例-识别不匹配的记录,然后为什么它们不匹配-列出所有差异的列表是没有用的。
这个列表不能告诉我任何我可以使用的东西,所以我仍然需要做进一步的操作来查看问题出在哪个数组上。
所以对我来说,首先检查相等性,然后使用两次_.difference更有意义,因为它的结果会产生有用的信息,例如
if (!_.isEqual(a, b) {
const idsFromBThatAreNotInA = _.difference(a, b);
const idsFromAThatAreNotInB = _.difference(b, a);
}我不知道OP的用例是什么,所以我不知道这是否直接相关,但也许它可以帮助其他人。
发布于 2021-07-10 04:55:05
_.xorWith是我能想到的最接近的,但它不适用于您提供的示例,因为有两个对象的id为3。
const n = [{id: 0, v: 9.7}, {id: 1, v: 1.7}, {id: 3, v: 2.6}, {id: 4, v: 1.89}]
const o = [{id: 1, v: 1.7}, {id: 3, v: 3.6}, {id: 7, v: 0.89}, {id: 4, v: 1.89}]
_.xorWith(n, o, _.isEqual)输出将为:
[
{ id: 0, v: 9.7 },
{ id: 3, v: 2.6 },
{ id: 3, v: 3.6 },
{ id: 7, v: 0.89 }
]https://stackoverflow.com/questions/60943684
复制相似问题