javascripttypescriptkeykey-value

Javascript Map Object with multiple keys to one value


Is it possible to have multiple keys giving the same result in a JS Map, without having to write all of them ?

For example:

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

This does not work but I am looking for something similar to avoid a switch case which is very verbose


Solution

  • You can write your own helper to transform a less verbose input into the one which new Map() expects:

    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()])