1
JS Map
で不変アクションを実行できますか? Map
を変更することなく、どのようにset
またはdelete
アイテムを使用しますか?質問の最初の部分のためのJavascript ES6マップでの不変更アクション
JS Map
で不変アクションを実行できますか? Map
を変更することなく、どのようにset
またはdelete
アイテムを使用しますか?質問の最初の部分のためのJavascript ES6マップでの不変更アクション
回答:
あなたのマップは不変にしたい場合は、マップにすべての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);
}
しかし、あなたが本当にこれを必要とする場合は、森やimmutable.js
ES6 'Map'が可変である、あなたができないように、関連LIBSを検索しようそれらを不変にする。 –
@VipinKumar私は試してみます:) – Vitalii
* "元のマップを変更せずにアイテムを設定または削除する方法は?" *最も簡単な方法は、独自のラッパーを実装し、すべての突然変異のマップをクローンすることです。しかし、それはメモリ効率的ではありません。 *構造的共有*のようなより良いアプローチがあります。 https://facebook.github.io/immutable-js/をご覧ください。 –