Неизменные действия с Javascript ES6 Map

1

Можно ли выполнять неизменные действия с помощью Map JS? Как бы вы set или delete элемент без изменения исходной Map?

  • 1
    ES6 Map изменчива, вы не можете сделать их неизменными.
  • 0
    @VipinKumar попробую :)
Показать ещё 1 комментарий
Теги:
ecmascript-6
immutability

1 ответ

0
Лучший ответ

Ответ на первую часть вопроса:

Если вы хотите сделать карту неизменной, вы можете использовать прокси для обработки всех геттеров/сеттеров на карте, например, ниже:

ВАЖНО: это медленное и запоминающее устройство. Не делайте этого в реальной жизни. Тебе было известно.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню