JS Mapオブジェクトのソート
JSではMapオブジェクトは要素の書き込み順に保存されますが、Mapのオブジェクトを並べ替えたい場合はどうすればいいですか?他の人の答えを参考にして、ここで小さなまとめをします.
次のmapがあれば
次にvalueに基づいて小さいものから大きいものに並べ替え、まず配列オブジェクトに変換したい
得られたarrayObj中のインデックス0はmap中のkey,インデックス1はmap中のvalueであり,以下では配列の並べ替え方法を採用することができる.
結果:
keyでソートしたい場合はsortメソッドを変更するだけです.
結果:
次に、次のようにMapオブジェクトに変換できます.
結果:
参照先:
1. Javascript Sort key value pair object based on value
2. Convert object array to hash map, indexed by an attribute value of the Object
次のmapがあれば
var map=new Map();
map.set("b","8");
map.set("c","10");
map.set("a","1");
map.set("d","7");
map.set("e","3");
次にvalueに基づいて小さいものから大きいものに並べ替え、まず配列オブジェクトに変換したい
var arrayObj=Array.from(map);
得られたarrayObj中のインデックス0はmap中のkey,インデックス1はmap中のvalueであり,以下では配列の並べ替え方法を採用することができる.
arrayObj.sort(function(a,b){return a[1]-b[1]})
結果:
(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
0: (2) ["a", "1"]
1: (2) ["e", "3"]
2: (2) ["d", "7"]
3: (2) ["b", "8"]
4: (2) ["c", "10"]
length: 5
__proto__: Array(0)
keyでソートしたい場合はsortメソッドを変更するだけです.
arrayObj.sort(function(a,b){return a[0].localeCompare(b[0])})
結果:
(5) [Array(2), Array(2), Array(2), Array(2), Array(2)]
0: (2) ["a", "1"]
1: (2) ["b", "8"]
2: (2) ["c", "10"]
3: (2) ["d", "7"]
4: (2) ["e", "3"]
length: 5
__proto__: Array(0)
次に、次のようにMapオブジェクトに変換できます.
var result = new Map(arrayObj.map(i => [i[0], i[1]));
結果:
Map(5) {"a" => "1", "e" => "3", "d" => "7", "b" => "8", "c" => "10"}
size: (...)
__proto__: Map
[[Entries]]: Array(5)
0: {"a" => "1"}
1: {"e" => "3"}
2: {"d" => "7"}
3: {"b" => "8"}
4: {"c" => "10"}
length: 5
参照先:
1. Javascript Sort key value pair object based on value
2. Convert object array to hash map, indexed by an attribute value of the Object