早安
我正在尝试匹配数据集上的某些字段。数据集包含以下记录:
{
"token" : "17e0d95f2e2112443cfb09970ae9140e",
"answers" : {
"Yourname" : "Marco",
"youremail" : "marco@me.nl",
"recemail" : "sonja@me.nl"
}
},
{
"token" : "cf5ae65b05249dc6b2a0c99c4cf9688e",
"answers" : {
"yourname" : "Sonja",
"youremail" : "sonja@me.nl",
"recemail" : "marco@me.nl"
}
}
在这种情况下,它应与两者匹配,因为recemail
(收件人电子邮件)与其他人的电子邮件地址相匹配。反之亦然。
我想要找到的是如何找到这两个记录(在更大的数据集中有更多这些匹配)。
所以,Marco的recemail
应该找到Sonja的youremail
,这两个匹配应该可以保存到另一个集合中,但这不是重要的部分。
希望有人可以帮我解决此问题 谢谢!
答案 0 :(得分:1)
以下代码将返回一个2项数组的数组。每个2项阵列都由发件人电子邮件和收件人电子邮件组成。每对只出现一次。换句话说,您将获得["marco@me.nl", "sonja@me.nl"]
但不会["sonja@me.nl", "marco@me.nl"]
。
var list = [{
"token" : "17e0d95f2e2112443cfb09970ae9140e",
"answers" : {
"Yourname" : "Marco",
"youremail": "marco@me.nl",
"recemail" : "sonja@me.nl" }
}, {
"token" : "cf5ae65b05249dc6b2a0c99c4cf9688e",
"answers" : {
"yourname" : "Sonja",
"youremail": "sonja@me.nl",
"recemail" : "marco@me.nl" }
}, {
"token" : "fe2c2740e083dfe02cc7e96520a0e079",
"answers" : {
"yourname" : "Joe",
"youremail": "joe@foo.com",
"recemail" : "mike@bar.com" }
}
];
var res = [], sz = list.length;
list.forEach(function(obj, pos) {
for(var i = pos + 1; i < sz; i++) {
if(
list[i].answers.youremail == obj.answers.recemail &&
list[i].answers.recemail == obj.answers.youremail
) {
res.push([ obj.answers.youremail, obj.answers.recemail ]);
}
}
});
console.log(res);
&#13;