js如何简洁地实现map [index] ++

时间:2018-02-21 03:25:37

标签: javascript dictionary ecmascript-6 es6-map

使用Array,我可以使用array[index]++

但是对于Map,我只知道map.set(index,map.get(index)+1)

我觉得它看起来很糟糕,如果index是一个长名称函数,我必须把它分成两行。

是否有更简洁的方式来实施map[index]++

1 个答案:

答案 0 :(得分:3)

我只能建议一个辅助函数,比如

function update(map, key, fn) {
    return map.set(key, fn(map.get(key), key));
}

update(table, index, i=>i+1);

作业没有语法糖,因此也没有速记作业。

如果你的密钥是字符串,你可以使用带有合适陷阱的Proxy来将更新伪装成属性访问。

const mapMethods = {
    has: Function.prototype.call.bind(Map.prototype.has),
    get: Function.prototype.call.bind(Map.prototype.get),
    set: Function.prototype.call.bind(Map.prototype.set),
};
function asObject(map) {
    return new Proxy(map, mapMethods);
}

asObject(table)[index]++;

免责声明:请不要这样做。这太吓人了。