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

标签 javascript dictionary ecmascript-6 es6-map

对于数组,我可以使用array[index]++

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

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

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

最佳答案

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

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

免责声明:请不要这样做。太可怕了。

关于javascript - js如何简洁实现map[index]++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48897716/

相关文章:

javascript - UIWebView什么时候完成图像加载?

javascript - agora.io 的 react.js 中是否有 UI 包

ios - 即使在展开它之后也可以选择具有值(value)

javascript - 如何在 native react 中单击平面列表项时将值传递给模态并显示模态

javascript - 数组数据类型操作

javascript - 如何为用户名约束创建 jQuery Validator 方法?

javascript - 如何将多个单选列表按钮复制到文本区域并将骨架更改为声音

python - 如何在 Python 中比较两个字典键?

python为scipy中的约束动态创建字典

javascript - ForEach ES6 没有工作