2013-06-23 1 views
5

DOM 요소를 키로 사용하여 해시를 만들고 싶습니다.요소를 JavaScript의 해시 키로 사용하기

var hash = {}; 
var set = function(element, value) { hash[element] = value; }; 
var get = function(element)  { return hash[element]; }; 

set(document.getElementById('foo'), 'bar'); 
get(document.getElementById('foo')); // returns 'bar' 

어떻게 각 Element에 대한 고유 한 값으로 그 해시 맵을 보장 할 수 있습니다 : 이는 다음 코드에 의해 설명된다?
ID가없는 숫자를 포함하여 임의의 숫자 Element이 전달 될 수 있으므로 원시 ID 문자열을 키로 사용할 수 없습니다.

+1

'id '를 직접 사용할 수 있다면 왜'document.getElementById'입니까? –

+1

@KarolyHorvath 죄송합니다. 이것은 단순화 된 예였습니다. 요소를 키 조작해야합니다. –

+0

[이 배열은 고유 어레이에 있습니다] (http://stackoverflow.com/questions/1960473/unique-values-in-an-array) – Stokedout

답변

6

ES 6까지의 JavaScript에서는 문자열 만 키로 사용할 수 있습니다. DOM 요소를 사용하려면 두 개의 연결된 목록 또는 WeakMap 개체를 사용하십시오. 후자의 방법의 보너스는 메모리 누수가 발생하지 않는다는 것입니다. 다음 브라우저에서 WeakMap 만 지원됩니다, 작성으로

var hash = new WeakMap(); 
hash.set(document.getElementById('foo'), 'bar'); 
hash.get(document.getElementById('foo')); // returns 'bar' 

:

이 예에 적용
  • 크롬 19

    • 파이어 폭스 6 (기본적으로 비활성화, instructions to enable 참조)
    • Opera 15 (기본적으로 사용하지 않도록 설정하려면 Opera를 --js-flags=--harmony으로 시작하여 사용하도록 설정하십시오).
    • 인터넷 익스플로러 11 (confirmed to exist in leaked build) 다른 모든 브라우저에서

    는 WeakMap 지원은 WeakMap.js polyfill를로드하여 달성 될 수있다.

  • +3

    _ "이 기술의 사양이 안정화되지 않았기 때문에 다양한 브라우저에서 호환성 표를 확인하고 실험용 기술의 구문과 동작은 사양이 변경 될 때 이후 버전의 브라우저에서 변경 될 수 있습니다."_ – gdoron

    +1

    @ gdoron 걱정할 수 있으므로 [Weakmap.js] (https://code.google.com/p/es-lab/source/browse/trunk/src/ses/WeakMap.js)와 같은 polyfill을 사용할 수 있습니다. 브라우저 호환성. –

    +0

    "후자 방법의 보너스는 메모리 누수가 발생하지 않는다는 것입니다." 나는이 경우 OP가 단지 정규 맵을 사용해야한다고 주장 할 것이다. –