イテラブル Map ヘルパー関数、キーに基づいてソート、アタイに基づいてソート、キーと値を逆にする
入門JavaScriptプログラミング (JD Isaacks(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(イテラブル)、LESSON 25(Map)、25.6(練習問題)、Q25-1の解答を求めてみる。
コード
function sortMapByKeys(map) {
return new Map(
[...map.keys()]
.sort()
.map(k => [k, map.get(k)])
);
}
function invertMap(map) {
return new Map(
[...map.keys()].map(k => [map.get(k), k])
);
}
function sortMapByValues(map) {
return invertMap(
sortMapByKeys(
invertMap(map)
)
);
}
function p(map) {
let s = '[';
for (const kv of map) {
s += `[${kv}],`;
}
s += ']';
return s;
}
let map1 = new Map(),
map2 = new Map([[1, 'a']]),
map3 = new Map([[5, 'a'], [1, 'e'], [4, 'b'], [2, 'd'], [3, 'c']]),
maps = [map1, map2, map3];
for (const map of maps) {
console.log(map);
console.log(`sortMapByKeys: ${p(sortMapByKeys(map))}`);
console.log(`sortMapByValues: ${p(sortMapByValues(map))}`);
console.log(`invertMap: ${p(invertMap(map))}`);
console.log();
}
入出力結果(Terminal、Zsh)
% node sample.js
Map(0) {}
sortMapByKeys: []
sortMapByValues: []
invertMap: []
Map(1) { 1 => 'a' }
sortMapByKeys: [[1,a],]
sortMapByValues: [[1,a],]
invertMap: [[a,1],]
Map(5) { 5 => 'a', 1 => 'e', 4 => 'b', 2 => 'd', 3 => 'c' }
sortMapByKeys: [[1,e],[2,d],[3,c],[4,b],[5,a],]
sortMapByValues: [[5,a],[4,b],[3,c],[2,d],[1,e],]
invertMap: [[a,5],[e,1],[b,4],[d,2],[c,3],]
%