【问题标题】:js how to implement map[index]++ conciselyjs如何简洁实现map[index]++
【发布时间】:2018-02-21 03:25:37
【问题描述】:

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

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

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

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

【问题讨论】:

  • Is there a more concise way 否(不包括明显的 - Map.prototype.incr = function(x) { this.set(x, this.get(x) + 1); }
  • 我认为真正的问题是......为什么你需要像数组一样使用 Map 对象......?
  • 例如统计每一项的数量

标签: javascript dictionary ecmascript-6 es6-map


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多