0

私はアイテムの配列を持っています。例えば:

var classes = ['link', 'block', 'hide', 'link', 'menu', 'block', 'content', 'link', 'footer', 'img', 'img', 'link', 'modal', 'button', 'form', 'input', 'button', 'input', 'link', 'toString', 'valueOf', 'button'];

頻度でソートされた一意のアイテムの配列を取得する必要があります。

'link'配列には5回含まれているため、アイテムは最初の場所にある必要があります。

'button'配列には3回含まれているため、項目は2番目にある必要があります。

["link", "button", "input", "img", "block", "footer", "content", "modal", "menu", "form", "hide", "toString", "valueOf"]
4

6 に答える 6

2

ECMAScript 5 メソッドを使用して簡単に取得できます。

var classes = ['link', 'block', 'hide', 'link', 'menu', 'block', 'content', 'link', 'footer', 'img', 'img', 'link', 'modal', 'button', 'form', 'input', 'button', 'input', 'link', 'toString', 'valueOf', 'button'];

var frequency = classes.reduce(function(data, item) {
    data[item] = -~data[item];
    return data;
}, {});

var uniques = Object.keys(frequency).sort(function(a, b) {
    return frequency[b] - frequency[a];
});

console.log(uniques);

古いブラウザをサポートする必要がある場合でも、shimsを使用できます。

于 2013-04-06T11:35:07.757 に答える
1

2 つのステップ:

  1. {'item', 'frequency'}データをカップルの配列に配置します
  2. array.sort関数を使用します。

    var arr = [{'item':'link', 'freq':4},{'item':'button', 'freq':2},{'item':'div', 'freq':5}];
    
    arr.sort(function(a,b){return b.freq - a.freq});
    
于 2013-04-06T10:44:44.633 に答える
1

Underscore.jsソリューション:

var dict = _.reduce(classes, function(memo, class) {
    memo[class] = memo[class] ? memo[class] + 1 : 1
}, {});

var pairs = _.pairs(dict);

var sortedPairs = _.sort(pairs, function(pair) {
    return pair[1];
});

var result = _.map(sortedPairs, function(pair) {
    return pair[0];
});
于 2013-04-06T10:51:24.063 に答える