我想知道在Map中反转键和值的最便捷方法是什么。是否有任何内置方法,或者应该通过遍历键和值来完成?
const map: Map<string, number> = new Map()
const inverse: Map<number, string>
答案 0 :(得分:8)
您可以使用Array.from
和Array#reverse
将逆元组传递给构造函数:
new Map(Array.from(origMap, a => a.reverse()))
看到它在一个示例上运行:
const origMap = new Map([[1, "a"],[2, "b"]]);
console.log(...origMap);
// Reverse:
const inv = new Map(Array.from(origMap, a => a.reverse()));
console.log(...inv);
答案 1 :(得分:4)
您可以在原始地图上使用spread运算符来获取键值数组对,您可以.map
来交换每一对。最后,将结果转储到副本的Map
构造函数中。任何重复的密钥都将丢失。
const orig = new Map([["a",1],["b",2]]);
const cpy = new Map([...orig].map(e => e.reverse()));
console.log([...orig]);
console.log([...cpy]);
顺便说一句,如果您的原始值确实是数字并且不稀疏,请考虑为您的“翻转”地图使用简单的旧数组。这可能会改善性能和语义,完全取决于您的用例。
答案 2 :(得分:2)
基于没有重复值的假设,您可以进行如下逆运算:
const map: Map<string, number> = new Map();
map.set('3', 3);
map.set('4', 4);
const inverse: Map<number, string> = new Map();
map.forEach((value, key) => inverse.set(value, key));