反转地图对象

时间:2019-06-11 19:20:59

标签: javascript node.js typescript

我想知道在Map中反转键和值的最便捷方法是什么。是否有任何内置方法,或者应该通过遍历键和值来完成?

const map: Map<string, number> = new Map()
const inverse: Map<number, string>

3 个答案:

答案 0 :(得分:8)

您可以使用Array.fromArray#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));