2014-09-19 62 views
2

我有一個職位數組。每個帖子都有'views'和'likes',數組中的用戶的_ids我想按類似的比率對數組排序。如何通過兩個值的乘積/商對數組進行排序?

雖然這不起作用。

posts.sort(function (a, b) { 
    return (b.likes.length * 100)/b.views.length 
}); 


{ 
"title":"Post 1", 
"views":"[1, 2, 3, 4, 5, 6]", 
"likes":"[1, 2]" 
} 
{ 
"title":"Post 2", 
"views":"[1, 2, 3, 4, 5, 6]", 
"likes":"[1, 2, 3, 4, 5, 6]" 
} 
{ 
"title":"Post 3", 
"views":"[1, 2, 3, 4, 5, 6, 7, 8, 9]", 
"likes":"[1, 2, 3, 4, 5]"} 
}] 

有什麼建議嗎?

+2

發佈您的帖子數組,可能有3-4個帖子,所以我們有一些樣本數據。我們不是介意的讀者 – Joe 2014-09-19 10:21:52

+0

您需要返回'a'和'b'大於或小於哪一個。目前你完全忽略了'a'元素。 – deceze 2014-09-19 10:23:20

回答

3

你是八九不離十,你只是忘記涉及ab對方:

posts.sort(function (a, b) { 
    var arate = (a.likes.length * 100)/a.views.length, 
     brate = (b.likes.length * 100)/b.views.length; 
    return arate - brate; 
}); 

,將在升序排列。如果要降序,請將回報更改爲return brate - arate;

+1

感謝您的幫助。這比我想象的要容易得多。 – Nubby 2014-09-19 10:35:43

+0

關於如何通過視圖對這些結果進行排序的任何建議?因此,即使兩個帖子具有相同的喜歡率,視圖最多的帖子也會排在第一位。 – Nubby 2014-09-19 13:04:30

+1

您需要進行二次比較。 'if(arate === brate){return a.views.length - b.views.length; } return arate - brate;' – 2014-09-19 13:06:03

相關問題