Javascript ES6 Map 的不可变操作

Immutable actions with Javascript ES6 Map

是否可以使用 JS Map 执行不可变操作? 如何在不改变原始 Map 的情况下 setdelete 一个项目?

问题第一部分的答案:

如果你想让你的地图不可变,你可以使用代理来处理所有 getters/setters 到地图,示例如下:

重要提示: 这是一种缓慢且耗费内存的方式。不要在现实生活中这样做。你被意识到了。

const map = new Map();
map.set(1, 'someValue');
const freezeThemAll = {
  get: (target, propName) => {
    if (propName === 'set') throw 'Sorry, map is immutable!';

    if (propName === 'get') {
      return target.get.bind(target);
    }

    return target[propName];
  }
};
const immutable = new Proxy(map, freezeThemAll);
try {
  console.log(`Trying to get some value: ${immutable.get(1)}`);
  console.log(`Trying to set some value: ${immutable.set(2, 'other value')}`);
} catch (e) {
  console.log(e);
}

但是,如果你真的需要这个,试着搜索相关的库,比如 Mori 或 immutable.js