比较两个数组并返回重复值

Posted

技术标签:

【中文标题】比较两个数组并返回重复值【英文标题】:compare two arrays and return duplicate values 【发布时间】:2014-12-08 05:06:52 【问题描述】:

如何检索存在于同一文档的两个不同数组中的元素。

例如。在 Posts 集合中,文档具有“interestbycreator”和“interestbyreader”字段。每个字段都包含用户 ID。

'interestbycreator':  //an array of ids here. IdA, idB, IdC, IdD, IdE,
'interestbyreader':  //an array of ids here. IdB, idE, iDF

基本上我希望找到两个数组中存在的所有 id,所以应该是 IdB 和 IdE。

我可以从带有下划线的数组中提取所有值并将它们存储在一个变量中。它们可以通过这种方式相互比较并返回重复项吗?或者有人可以阐明另一种解决方案。

从 'interestbyreader 检索所有 Id 的示例

var interestbypostcreater = Posts.find(_id: Meteor.user().profile.postcreated[0], fields: interestbyreader: 1).fetch();
var interestedReaderIds = _.chain(interestbypostcreator).pluck('interestbyreader').flatten().value();

假设我将另一个数组 'interestbycreator' 存储在一个名为 interestIdcreator 的变量中,是否可以比较它们以查找重复项并返回这些重复项?

【问题讨论】:

您考虑过使用_.intersection 吗? underscorejs.org/#intersection 感谢您指出这一点。 【参考方案1】:

正如saimeunt 在 cmets 中所说,当您可以访问下划线时,请使用 intersection,但您也可以使用纯 javascript 进行操作:

var x = ['IdA', 'idB', 'IdC', 'IdD', 'IdE'];
var y = ['idB', 'IdE', 'IdF'];

var z = x.filter(function(val) 
  return y.indexOf(val) != -1;
);

console.log(z);

然后数组z 包含两个条目。

感谢https://***.com/a/14930567/441907

【讨论】:

如何在另一个变量中获得“返回”结果?我想将它们保存为数组而不是转换它们,以便我可以使用变量来查询数据库。谢谢您的帮助 你必须深度复制源数组,例如slice()jsfiddle.net/94mjfhyh 为了换取内存,可以使用set 进行查找来加快速度。【参考方案2】:

正如 Saimeunt 指出的那样,可以这样做

var x = ['IdA', 'idB', 'IdC', 'IdD', 'IdE'];
var y = ['idB', 'IdE', 'IdF'];

var z = _.intersection(x, y);

【讨论】:

以上是关于比较两个数组并返回重复值的主要内容,如果未能解决你的问题,请参考以下文章

PHP - 如何比较两个数组并删除重复值

比较两个对象数组并在新数组中返回匹配值

查找两个数组之间的重复值

比较两个数组。返回值错误 (1)

[讲解]sql except和intersect运算符(比拟两个或多个select语句的结果并前去非重复值)

C#函数返回两个值[重复]