Lodash / javascript:比较两个集合并返回差异[重复]

Posted

技术标签:

【中文标题】Lodash / javascript:比较两个集合并返回差异[重复]【英文标题】:Lodash / javascript : Compare two collections and return the differences [duplicate] 【发布时间】:2017-04-01 01:37:20 【问题描述】:

我有两个对象数组:

我的表格的元素不是原始值,而是复杂的对象。

array1 = [obj1,obj2,obj3,obj4]
array2 = [obj5,obj5,obj6,obj7]

我想比较两个数组,看看array2的元素是否已经存在于array1中,然后创建一个不同的新数组。

有什么建议吗?

【问题讨论】:

是的,_.difference 所以这被 6 个人标记为重复?那 6 个人知道基元数组和复杂对象数组的区别吗? 我认为 lodash _.differenceBy(lodash.com/docs/4.17.15#differenceBy) 会有所帮助。 【参考方案1】:

ES6这就够了:

array2.filter(e => !array1.includes(e));

没有包含

array2.filter(e=> array1.indexOf(e) < 0);

Plunker给你

【讨论】:

无法使用您的解决方案,因为我正在使用带有 typescript 的 angular 2,包括返回错误 这还不够。您在 plunkr 中使用原始值,OP 不是【参考方案2】:
var presents = _.intersectionWith(array1, array2, _.isEqual);
var dif = _.differenceWith(array1, array2, _.isEqual);

_.differenceWith 仅从 4.0.0 lodash 版本开始可用

【讨论】:

_.differenceWith 仅从 4.0.0 lodash 版本开始可用 你看到他问过 :::: 对象数组array1 = [obj1,obj2,obj3,obj4] array2 = [obj5,obj5,obj6,obj7]【参考方案3】:

_.difference 只为您提供第一个数组中的元素,而不是第二个数组中的元素,而不是数组 2 中不在数组 1 中的元素。

这是你想要达到的目标吗?

【讨论】:

是的,这就是我想要实现的目标,但是当我在两个数组相同的情况下使用 _difference 时,我将 array1 作为输出!正常吗? no... 应该发送给您 [] (我现在已经在 lodash 文档中的 chrome 控制台上对其进行了测试...)。你使用的是 nodejs 还是网络浏览器? 是的,它终于可以正常工作了,这是我犯的错误。谢谢你的帮助

以上是关于Lodash / javascript:比较两个集合并返回差异[重复]的主要内容,如果未能解决你的问题,请参考以下文章

比较两个包含对象的数组以计算发生了啥变化?

Javascript中比较两个无序对象数组的自定义实现

如何在使用 lodash 省略空值的同时合并两个对象

JavaScript工具库之Lodash

如何使用 JavaScript (lodash) 深度映射对象键?

JavaScript工具库——Lodash.js介绍安装及使用