0

有了数组,我可以使用array[index]++

但有了地图,我只知道map.set(index,map.get(index)+1)

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

有没有更简洁的实现方式map[index]++

4

1 回答 1

3

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

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

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

赋值没有语法糖,因此也没有简写赋值。


如果您的键是字符串,您可以使用Proxy带有适当陷阱的 a 将更新伪装成属性访问。

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]++;

免责声明:请不要那样做。好吓人。

于 2018-02-21T03:47:11.577 回答