Search code examples
javascriptarraysdictionarydefault-value

Map default value


I'm looking for something like default value for Map.

m = new Map();
//m.setDefVal([]); -- how to write this line???
console.log(m[whatever]);

Now the result is Undefined but I want to get empty array [].


Solution

  • First of all to answer the question regarding the standard Map: Javascript Map as proposed in ECMAScript 2015 does not include a setter for default values. This, however, does not restrain you from implementing the function yourself.

    If you just want to print a list, whenever m[whatever] is undefined, you can just: console.log(m.get('whatever') || []); as pointed out by Li357 in his comment.

    If you want to reuse this functionality, you could also encapsulate this into a function like:

    function getMapValue(map, key) {
        return map.get(key) || [];
    }
    
    // And use it like:
    const m = new Map();
    console.log(getMapValue(m, 'whatever'));

    If this, however, does not satisfy your needs and you really want a map that has a default value you can write your own Map class for it like:

    class MapWithDefault extends Map {
      get(key) {
        if (!this.has(key)) {
          this.set(key, this.default());
        }
        return super.get(key);
      }
      
      constructor(defaultFunction, entries) {
        super(entries);
        this.default = defaultFunction;
      }
    }
    
    // And use it like:
    const m = new MapWithDefault(() => []);
    m.get('whatever').push('you');
    m.get('whatever').push('want');
    console.log(m.get('whatever')); // ['you', 'want']