Javascript ES6 Map 的不可变操作
Immutable actions with Javascript ES6 Map
是否可以使用 JS Map
执行不可变操作?
如何在不改变原始 Map
的情况下 set
或 delete
一个项目?
问题第一部分的答案:
如果你想让你的地图不可变,你可以使用代理来处理所有 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
是否可以使用 JS Map
执行不可变操作?
如何在不改变原始 Map
的情况下 set
或 delete
一个项目?
问题第一部分的答案:
如果你想让你的地图不可变,你可以使用代理来处理所有 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