Node.js:在数组元素中指定值,然后计算得分

时间:2014-10-19 20:24:15

标签: javascript arrays node.js underscore.js

我有一组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 一起发送?

1 个答案:

答案 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