我有一组id,它们是两个数组的交集。我想在交集数组中为每个元素分配一个值。以下是我不完整的如何处理的代码:
//intersection array
var interArray= ["5ghIJDpPoe3CfHMGu71E6T","69Saih0L7exhpURTx2TN3r","7biThmNOfzA4nZR9h2B6DL",
"51m0PrZokFZNk5b5xptyzC","1XPta4VLT78HQnVFd1hlsK"];
//Edited getting score
function calculateScore (interArray, callback) {
var tmp = 0;
for(i = 0; i < interArray.length; i++) {
tmp++;
}
var score = (tmp/22) * 0.5; //22 for example is the total length of the two arrays that were combined
callback(null, score);
}
如果我想预测两个数组的相似性,这个程序是否正确/有效?
P.S。我使用underscore.js来获取交集,这是在Node.js API服务上运行的
谢谢!
修改
所以基本上我有两个数组。第一个数组是来自用户的ID集合。第二个数组是来自用户的ID集合。这些ID指的是每个
引用的项目async.parallel([
function(callback) {
async.waterfall([getUser,getItems],
function(err, results) {
callback(null, results);
});
},
function(callback) {
async.waterfall([getUsers,getItems],
function(err, results) {
callback(null, results);
});
}
], function(err, results) {
var currentUserArray = results[0]; //item ids from user
var matchedUsersArray = results[1]; //item ids per user
function mapUsersArray () {
//Get the item ids per matchedUser
}
function getIntersection() {
//Get intersection of currentUserArray and matchedUsersArray[i]
}
//Compute similarity/match score of ids of currentUser per matchedUser
});
重述问题:此程序是正确还是有效?如何计算他们的相似/匹配分数?由于我映射了matchedUsersArray,我如何再次获取matchedUser详细信息,以便将其作为响应与matchScore 一起发送?
答案 0 :(得分:0)
改进位代码......
你直接使用interArray.length,不需要使用tmp变量..
var interArray= ["5ghIJDpPoe3CfHMGu71E6T","69Saih0L7exhpURTx2TN3r","7biThmNOfzA4nZR9h2B6DL",
"51m0PrZokFZNk5b5xptyzC","1XPta4VLT78HQnVFd1hlsK"];
function calculateScore (interArray, callback) {
var score = (interArray.length/22) * 0.5; //22 for example is the total length of the two arrays that were combined
callback(null, score);
}
我不明白确切的问题,你问的是在数组之间找到相似性的程序吗?因为这取决于您在做什么样的预测,所以有多种算法依赖于不同的数据集。当前代码很好,虽然它以某种方式计算相似性。但是,假设我们有两个长度为10的数组,共有5个值。 interArray.length将是5然后它是5/20 = 0.25,它应该是0.5,而我认为两个数组都有一半的共同值。
所以它应该是:
score = interArray.length /(所有数组的长度之和/数组的数量)
e.g。对于我们的案例
得分= 5 /(20/2)= 0.5