2017-12-08 24 views
1

JS Map으로 불변의 동작을 수행 할 수 있습니까? Map을 변경하지 않고 set 또는 delete의 상품을 어떻게하나요?Javascript ES6에서 변경할 수없는 동작

+1

ES6'지도'가 변경 가능한 검색하려고 그들을 불변으로 만든다. –

+0

@VipinKumar 시도해 보겠습니다 :) – Vitalii

+3

* "원래지도를 변경하지 않고 항목을 설정하거나 삭제하는 방법은 무엇입니까?"* 가장 간단한 방법은 고유 한 래퍼를 구현하고 모든 돌연변이에 대해지도를 복제하는 것입니다. 그러나 그것은 효율적이지 않습니다. 구조적 공유 *와 같은 더 나은 접근법이 있습니다. https://facebook.github.io/immutable-js/를 참고하십시오. –

답변

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

, 당신은 정말이 필요하면, 당신은 할 수 없습니다, 관련 모리 같은 libs와 또는 immutable.js