【问题标题】:Node.js : Assign value in an array element then calculate scoreNode.js:在数组元素中赋值,然后计算分数
【发布时间】:2014-10-20 14:21:30
【问题描述】:

我有一个 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);
}

如果我想预测两个数组的相似性,这个过程是否正确/有效?

附:我使用 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一起发送

【问题讨论】:

  • “相似性”到底是什么意思?请定义您希望代码执行的操作。
  • 22 来自哪里?你的函数是怎么知道的?
  • @Bergi 编辑了问题:D
  • @naomik 我已经映射了项目 ids 数组然后得到了它的长度。

标签: javascript arrays node.js underscore.js


【解决方案1】:

一点代码改进...

你有 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 /(所有数组长度之和/数组个数)

例如对于我们的案例

分数 = 5/(20/2) = 0.5

【讨论】:

  • 嗨。谢谢您的回答。我已经编辑了我的问题以进一步阐明我的观点。 :D 我认为目前获得两者之间的相似性很好,但是您能指出一种可以进一步提高分数准确性的算法吗?谢谢!
  • 您可以使用汉明距离算法。稍作调整就可以很好地解决您的问题。假设我们有两个数据集(对象):{1,4,3,2} 和 { 9,4,7,2} 汉明距离是一个对象改变以使其等于第二个值所需的值的数量。所以在我们的例子中,汉明距离是 2(分别将 1 和 3 更改为 9 和 7 )
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-07
  • 2014-01-29
相关资源
最近更新 更多