Можно ли выполнять неизменные действия с помощью Map
JS? Как бы вы set
или delete
элемент без изменения исходной Map
?
Ответ на первую часть вопроса:
Если вы хотите сделать карту неизменной, вы можете использовать прокси для обработки всех геттеров/сеттеров на карте, например, ниже:
ВАЖНО: это медленное и запоминающее устройство. Не делайте этого в реальной жизни. Тебе было известно.
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
Map
изменчива, вы не можете сделать их неизменными.