使用Javascript ES6 Map进行不可变的操作

时间:2017-12-08 16:27:08

标签: javascript ecmascript-6 immutability

是否可以使用JS Map执行不可变操作? 在不改变原始set的情况下,您如何deleteMap项目?

1 个答案:

答案 0 :(得分:0)

回答问题的第一部分:

如果你想使你的地图不可变,你可以使用代理来处理地图的所有getter / setter,例如:

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



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