JavaScript中的Map对象如何将多个键映射到一个值?

3

在JS Map中,是否可能拥有多个键产生相同的结果,而不必编写所有的键?

例如:

const mp = new Map<number, string>([
      [2 || 4, 'even'],
      [1 || 3, 'odd']
    ]);

这个不起作用,但我正在寻找类似的东西来避免使用冗长繁琐的switch case。


1
这看起来像是一个XY问题。你使用switch做的任务是什么?(它可能不是一个奇偶检查,这可以很容易地在没有映射的情况下完成。) - Teemu
这个问题有帮助吗?https://dev59.com/xWUq5IYBdhLWcg3wJNLg - ikhvjs
JavaScript的映射(Map)不能有重复的键,它们必须是唯一的。请参见相关链接:https://stackoverflow.com/questions/3996135/js-associative-object-with-duplicate-names - msalla
@moritzsalla OP在谈论具有相同值的不同键,而不是具有相同键的不同值。 - VLAZ
1
我试图将一个类型与一个字符串映射。有些类型可以得到相同的字符串。 - Auloma
2个回答

4
您可以编写自己的辅助函数,将不太冗长的输入转换为new Map()期望的输入格式:

const mapReducer = (arr, [keys, val]) => [
  ...arr,
  ...(Array.isArray(keys)
    ? [...keys.map(key => [key, val])]
    : [[keys, val]]
  )
];

const mp = new Map([
  [[2, 4], 'even'],
  [[1, 3], 'odd'],
  [0, 'meh...']
].reduce(mapReducer, []));

console.log([...mp.entries()])


2
谢谢,这就是我想要的! - Auloma

1

是否可以在JS Map中拥有多个键提供相同的结果,而无需编写所有这些键?

不行。Map是键和值之间的1:1连接。如果您想要两个不同的键具有相同的值,则需要在Map中创建两个条目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接