pou*_*uya 5 javascript node.js typescript
我想知道在Map中反转键和值的最便捷方法是什么。是否有任何内置方法,或者应该通过迭代键和值来完成?
const map: Map<string, number> = new Map()
Run Code Online (Sandbox Code Playgroud)
const inverse: Map<number, string>
Run Code Online (Sandbox Code Playgroud)
您可以使用Array.from和将逆元组传递给构造函数Array#reverse:
new Map(Array.from(origMap, a => a.reverse()))
Run Code Online (Sandbox Code Playgroud)
看到它运行在一个示例上:
new Map(Array.from(origMap, a => a.reverse()))
Run Code Online (Sandbox Code Playgroud)
假设没有重复值,您可以执行如下逆操作:
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));
Run Code Online (Sandbox Code Playgroud)
您可以在原始映射上使用扩展运算符来获取键值数组对,您可以.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]);Run Code Online (Sandbox Code Playgroud)
这很简洁,但确实涉及额外的数组创建,正如不可模仿的trincot所指出的那样。只有当地图很大时这才是问题。
顺便说一句,如果您的原始值确实是数字并且不稀疏,请考虑为您的“翻转”地图使用普通的旧数组。这可能会提高性能和语义,完全取决于您的用例。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |