2014-10-19 72 views
-1

我有一個兩個數組相交的ID數組。我想爲交集數組中的每個元素賦值。下面是我如何進行殘缺碼:Node.js:分配數組元素的值然後計算得分

//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 
}); 

重述問題項目:是此過程正確或有效率?我如何計算他們的相似性/匹配分數?而且,由於我映射了匹配的用戶數組,我如何再次獲得匹配的用戶詳細信息,因此我可以將它作爲響應與matchScore一起發送?

+0

你是什麼意思「相似性」?請定義你想要你的代碼做什麼。 – Bergi 2014-10-19 21:30:21

+0

22從哪裏來?你的功能如何知道它? – naomik 2014-10-19 22:11:20

+0

@Bergi編輯的問題:D – DexterBrylle 2014-10-20 06:21:59

回答

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,而不是如我想作爲兩個陣列具有共同的值的一半..

所以它應該是:

得分= interArray.length /(所有陣列的長度的總和/陣列數)

例如對於我們的案例

score = 5 /(20/2)= 0.5

+0

嗨。謝謝您的回答。我編輯了我的問題以進一步闡明我的觀點。 :D 我認爲兩者之間的相似性現在很好,但是你能否指點我一個算法,它會進一步提高分數的準確性?謝謝! – DexterBrylle 2014-10-20 06:27:16

+0

你可以使用海明距離算法.. 這將是偉大的小調整你的問題.. 假設我們有兩個數據集(對象): {1,4,3,2}和{9,4,7,2} 海明距離是一個對象需要改變的數值它等於第二個...... 所以在我們的例子中,海明距離是2(分別將1和3改爲9和7) – AhsanAyaz 2014-10-20 09:40:44