HTMLリストがあります
<select>
<option value="w" count="1">w (1)</option>
<option value="a" count="1">a (1)</option>
<option value="d" count="5">d (5)</option>
<option value="r" count="0">r (0)</option>
<option value="q" count="0">q (0)</option>
<option value="s" count="0">s (0)</option>
<option value="b" count="5">b (5)</option>
</select>
count
リストを最初に、次に。の順に並べたいvalue
。
出力:
<select>
<option value="b" count="5">b (5)</option>
<option value="d" count="5">d (5)</option>
<option value="a" count="1">a (1)</option>
<option value="w" count="1">w (1)</option>
<option value="q" count="0">q (0)</option>
<option value="r" count="0">r (0)</option>
<option value="s" count="0">s (0)</option>
</select>
count
ORで並べ替える方法は知ってvalue
いますが、それらを組み合わせる簡単な方法が見つかりません。
カウントで並べ替え:
select.sort(function (a, b) {
var c1 = parseInt($(a).attr('count'), 10);
var c2 = parseInt($(b).attr('count'), 10);
return c1 < c2 ? 1 : c1 > c2 ? -1 : 0;
});
そして価値によって
select.sort(function (a, b) {
return $(a).text().toUpperCase().localeCompare($(b).text());
});
私はオブジェクトを構築することを考えています:
var map = {
5: ['d', 'b'],
1: ['a', 'w'],
0: ['r', 'q', 's']
};
次に、各キーを並べ替えます。
function keys(map) {
var keys = [];
for (var key in map) {
if (map.hasOwnProperty(key)) map[key].sort();
}
return keys;
}
keys(map);
map;
そして最後にselect
リストを再構築します。
もっと簡単な方法はありますか?