2011-06-13 40 views
2

我正在使用数组来存储文本中特定单词的出现次数。数据的格式是word:number。 我想通过降序出现次数(即按值)对数组进行排序。 有没有一个干净的方式来做到这一点?或者我应该考虑使用不同的数据结构?如何在jQuery中对数组进行排序?

// This is how the array is filled. 
var matches = ["word1", "word2", "word2", "word3", "word4", "word4", "word4"]; 

var count = {}; 
$.each(matches, function(key, value) { 
    if(!count[value]) 
     count[value] = 1; 
    else 
     count[value]++; 
}); 

循环之后是我所得到的,并希望通过降值排序:

count = { 'word1':'1', 'word2':'2', 'word3':'1', 'word4':'3' }; 

我确实希望它看起来像(按价值排序):

count = { 'word4':'3', 'word2':'2', 'word1':'1', 'word3':'1' }; 
+1

它不是数组,它是对象。 – 2011-06-13 11:00:08

+0

虽然这不是一个有效的对象。或者OP意味着'['word1','word2',...]'或者他失去了钥匙。 – 2011-06-13 11:28:46

+0

对不起,评论仅指第一行(改变了它)。 @Tomalak这就是我的意思。 – Steven 2011-06-13 11:37:08

回答

8

试试这个:

function sortmyway(data_A, data_B) 
{ 
    return (data_A - data_B); 
} 
var list =[ 39, 108, 21, 55, 18, 9] 
list.sort(sortmyway) //[9, 18, 21, 39, 55, 108] 

working example here

+0

OP没有数组,而是一个对象。 – 2011-06-13 11:06:23

+0

真的吗?我看起来不像一个对象,我仍然看到一个数组,当我提醒“list [0]”时,它会给我“9”,请参阅http://jsfiddle.net/srakesh/82VVn/1/。 – 2011-06-13 11:08:55

+0

@Tomalak你介意给我解释一下吗? – 2011-06-13 11:25:11

-1

我建议你使用某种树,因为它已经具有排序映射的属性。

+0

你为什么要那样做? – 2011-06-13 11:54:03