我有这张ES6地图:
Map(6) {"Coratia" => 1, "Korea" =>, "Norway" => 2, "Munich" => 1, "Austrlia" => 1, ...}
我想交换键和值,使其像这样:
Map(6) {1 => "Coratia", 1 => "Korea", 2 => "Norway", 1 => "Munich", 1 => "Australia", ...}
答案 0 :(得分:0)
这里有一个解决方案,它使用了 CodyKnapp 所提到的想法。它使用Array.reduce()生成value->key
反向Map
。
let myMap = new Map([
["Cortia", 1],
["Korea", 1],
["Norway", 2]
]);
// Generate the reverse Map.
let res = [...myMap.entries()].reduce((acc, [k, v]) =>
{
acc.has(v) ? acc.set(v, acc.get(v).concat(k)) : acc.set(v, [k]);
return acc;
}, new Map());
// Log the new generated Map.
res.forEach((v, k) => console.log(`${k} => ${v}`));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
注意,如注释中所述,您不能有一个Map
可以为多个不同的key
复制相同的values
。 / p>
答案 1 :(得分:0)
ES6 Map转换为数组时如下所示:
[[key, value], [key, value], [key, value],...]
一个二维数组。
演示大纲
假设我们有一个包含键和值的Map,制作一个新的空Map。
使用for...of
循环遍历整个Map
在每次迭代.get()
上,键/值然后将值作为键,将键作为值分配给空Map。
控制台不会以常规方式显示自己,以便显示其内容,它必须遍历每个键/值对并记录它们。
let x2D = new Map([
['a', 1],
['b', 2],
['c', 3],
['d', 4],
['e', 5]
]);
let d2X = new Map();
for (let [key, value] of x2D) {
let v = x2D.get(key);
d2X.set(v, key);
}
for (let [k, v] of d2X) {
console.log('[' + k + ', ' + v + ']');
}