2013-02-14 33 views
0

我正在嘗試爲個人目的創建腳本。我正在分析博客文章的列表,提取他們的標籤,我需要獲得標籤排名。如何在javascript中創建標籤排名

post1_tags: ['chocolate','drink','sweet','food','cocoa'] 
post2_tags: ['cake','sacher','apricot','chocolate','cream'] 
post3_tags: ['cheesecake','cake','baking','sour cream','new york'] 

我設法創建什麼樣的標籤[「巧克力」 = 2,「喝」 = 1,「甜」 = 1等]的數組,但我不能去。看起來像不可能對這樣的數組進行排序。我嘗試了很多方法,搜索了很多東西到stackoverflow,但我只能通過標籤名稱進行排序。該腳本的目的實際上是瞭解給定的一組帖子中最受歡迎的標籤。

var tags = ["muffin","tin","cupcake","cupcake","holders","cupcake","quality","blog","muffin"]; 

var tags_rank = {}; 
$.each(tags, function(index,value){ 
if (!tags_rank[value]) { 
    tags_rank[value] = 1; 
} 
else { 
    tags_rank[value]++; 
} 
}); 

陣列(tags_rank)我得到的是:

Object { muffin=2, tin=1, cupcake=3, ...} 

我不能夠把它整理出來。 我需要的腳本來顯示使用像頂部標籤的排名:

蛋糕:3 鬆餅:2 牛奶:2 巧克力:1

預先感謝您。 S.

+0

http://stackoverflow.com/a/1069840/1032493 – dmk 2013-02-14 12:28:45

回答

1

純Javacript溶液:

Demo

var tags = ["muffin","tin","cupcake","cupcake","holders","cupcake","quality","blog","muffin"]; 

var ranking = []; 
var found; 

for(var i=0; i<tags.length; i++) { 
    found = false; 

    for(var x=0; x<ranking.length; x++) { 
     if(ranking[x].tag == tags[i]) { 
      found = true; 
      ranking[x].count++; 
      break; 
     } 
    } 

    if(!found) { 
     ranking[x] = { tag : tags[i], count : 1 }; 
    } 
} 

ranking.sort(function(a, b){ 
    if (a.count < b.count) 
    return 1; 
    if (a.count > b.count) 
    return -1; 
    return 0; 
}); 

結果是一個數組ranking它看起來像:

[ 
    { 
     "tag": "cupcake", 
     "count": 3 
    }, 
    { 
     "tag": "muffin", 
     "count": 2 
    }, 
    { 
     "tag": "tin", 
     "count": 1 
    }, 
    { 
     "tag": "holders", 
     "count": 1 
    }, 
    { 
     "tag": "quality", 
     "count": 1 
    }, 
    { 
     "tag": "blog", 
     "count": 1 
    } 
] 
+0

謝謝!完美的作品。 – Seb 2013-02-15 13:27:47

+0

@Seabastiano沒有問題:)如果這解決了它,考慮接受答案。請參閱http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – MrCode 2013-02-15 14:18:14