首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lodash _.intersection()的最有效逆是什么

lodash _.intersection()的最有效逆是什么
EN

Stack Overflow用户
提问于 2020-03-31 12:54:01
回答 2查看 1.8K关注 0票数 1

使用lodash,我想找出两个不同的数组之间的所有元素,基本上是_.intersection[with|by]的相反或相反。当然,我回顾了_.difference[with|by],但它不是_.intersection的反向版本,因为它只比较第一个数组和第二个数组,而不是将它们相互比较。我能得到的最接近的是非常复杂的,这促使我在这里问,我是否错过了一个更有效和/或更优雅的选择。我只对基于lodash的解决方案感兴趣。

这是我能想到的最接近的方法,可以得到两个数组中不同值的唯一数组。我感兴趣的是具有不在数组中的id属性的值,以及具有匹配的id属性但不同v属性的值。

代码语言:javascript
复制
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')

该代码将生成:

代码语言:javascript
复制
[{id: 0, v: 9.7}, {id: 3, v: 2.6}, {id: 7, v: 0.89}]
EN

回答 2

Stack Overflow用户

发布于 2020-05-13 10:20:46

我在寻找相同的东西后发现了这个问题,但后来我意识到,对于我的用例-识别不匹配的记录,然后为什么它们不匹配-列出所有差异的列表是没有用的。

这个列表不能告诉我任何我可以使用的东西,所以我仍然需要做进一步的操作来查看问题出在哪个数组上。

所以对我来说,首先检查相等性,然后使用两次_.difference更有意义,因为它的结果会产生有用的信息,例如

代码语言:javascript
复制
if (!_.isEqual(a, b) {
  const idsFromBThatAreNotInA = _.difference(a, b);
  const idsFromAThatAreNotInB = _.difference(b, a);
}

我不知道OP的用例是什么,所以我不知道这是否直接相关,但也许它可以帮助其他人。

票数 0
EN

Stack Overflow用户

发布于 2021-07-10 04:55:05

_.xorWith是我能想到的最接近的,但它不适用于您提供的示例,因为有两个对象的id为3。

代码语言:javascript
复制
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)

输出将为:

代码语言:javascript
复制
[
  { id: 0, v: 9.7 },
  { id: 3, v: 2.6 },
  { id: 3, v: 3.6 },
  { id: 7, v: 0.89 }
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60943684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档