是否可以使用JS Map
执行不可变操作?
在不改变原始set
的情况下,您如何delete
或Map
项目?
答案 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