2017-12-08 22 views
1

JS Mapで不変アクションを実行できますか? Mapを変更することなく、どのようにsetまたはdeleteアイテムを使用しますか?質問の最初の部分のためのJavascript ES6マップでの不変更アクション

+1

ES6 'Map'が可変である、あなたができないように、関連LIBSを検索しようそれらを不変にする。 –

+0

@VipinKumar私は試してみます:) – Vitalii

+3

* "元のマップを変更せずにアイテムを設定または削除する方法は?" *最も簡単な方法は、独自のラッパーを実装し、すべての突然変異のマップをクローンすることです。しかし、それはメモリ効率的ではありません。 *構造的共有*のようなより良いアプローチがあります。 https://facebook.github.io/immutable-js/をご覧ください。 –

答えて

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); 
 
}

しかし、あなたが本当にこれを必要とする場合は、森やimmutable.js

関連する問題