2011-08-01 8 views
0

가능한 복제를 사용하여 배열에 키로서 객체를 저장할 수 :
How to store objects in a array using javascript어떻게 자바 스크립트를

내가 솔루션 어떤 배열의 키로서 객체를 저장할.

myTabObj을 키로 배열에 저장하고 싶습니다. 내 생각에 myTabObj은 사파리 브라우저 탭에 고유합니다.

또는 사파리 확장 기능 개발에 탭 특정 값을 설정하는 방법

.

나는 즉시 솔루션을 원한다. 예를 들어, 나는 3 개의 매개 변수를 동적으로 모든 탭에 대해 설정하는 솔루션 또는 대안 솔루션입니다. 사전에

감사

답변

1

첫째, 당신은 객체 (해시)가 아닌 배열을 사용 sgould. 어쨌든 배열은 자바 스크립트에서 객체 (해시)입니다. 배열을 JS에서 객체 (해시)로 취급 할 수 있습니다. 숫자가 아닌 값을 키로 사용하지만 이것은 지저분합니다. Array 함수는 객체 프로토 타입의 dproperties를 가져옵니다. arr.length이지만 배열 객체에 저장된 숫자 키에서만 작동합니다. (파이어 버그의 JS 콘솔 체결)

예 :

>>> a=[] 
[] 

>>> a[{}] = 42 
42 

>>> console.dir(a)  
[object Object] 42 
>>> a.length 
0 
>>> a[{}] 
42 

먼저 I 배열을 만든다. 그런 다음 배열을 나타내는 객체에서 toString이 암시 적으로 호출 된 "{}"키가있는 속성을 만듭니다. 이것은 숫자 키가 아니기 때문에 배열 특정 함수는이를 무시합니다. 배열의 길이는 0입니다. 그러나 마지막 줄에 표시된 것처럼 JS의 모든 것과 같은 객체 인 array-instance는 속성을 저장합니다.

두 번째로 개체 (해시)입니다.

키는 항상 문자열입니다. 그렇기 때문에 어떤 사람들은 여러분이 객체를 키로 사용할 수 없다고 말합니다 -하지만 그건 사실이 아닙니다! Javascript에서 문자열이 아닌 값을 키로 사용하면 해당 객체의 toString() 메서드가 호출됩니다. Object.prototype.toString에 정의 되었기 때문에 모든 메서드에 해당 메서드가 있습니다. 그러나 대체 기본 메서드를 재정의하지 않으면 개체가있는 개체와 동일한 문자열을 항상 얻을 수 있습니다.

예 (방화범의 JS 콘솔에 입력) : 그래서

>>> a={} 
Object {} 

>>> a[{}] = 1 
1 

>>> console.dir(a) 
[object Object] 1 

>>> a[{prop:"text"}] = 1 
>>> console.dir(a) 
[object Object] 1 

, 당신은, 키 등의 개체를 사용할 수 있지만 당신은 당신의 자신의 toString 기능은 모든 객체 인스턴스에 대한 정의가 반드시 당신의 의도를 확인해야합니다 사용. 이러한 toString 함수는 대개 인스턴스에 저장된 (고유 한) 문자열 ID 값과 ("클래스") 이름과 같은 것을 인쇄합니다. oyur toString 함수가 객체 (인스턴스)를 키로 사용할 수없는 고유 한 문자열을 생성하는 것이 보장되지 않는다면 당연히 할 수 있습니다. 그러나 신뢰할 수있는 1 : 1을 갖지 않으므로 분명히 조금 쓸모가 없습니다. 맵핑.

이것은 구체적인 도움이 아니지만 필자는 언어가 작동하는 방식에 대한 일반적인 조언을 제공하는 것을 선호한다는 것을 인정해야합니다. 게다가 구체적인 해결책을 제시하기에 충분하지 않은 (코드) 컨텍스트가 없습니다.당신의 선택의 JS 라이브러리 프레임 워크의 기능, 경우 - 어쨌든, 단순히위한 루프 또는 "... 각()"로 배열을 반복 한 후

var arr = []; 

arr.push(instance); 

를 사용하여 배열에 저장하기 당신은 하나를 사용합니다.

+1

가장 완벽한 답변입니다. 설명해 주셔서 감사합니다. :) – Daniel

1

jshashtable을 사용하여 임의의 개체를 키로 사용하여 값을 저장할 수 있습니다.

+0

또는 ['WeakMap'] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/WeakMap)을 사용하십시오. 부작용으로 적용 가능한 경우 WeakMaps를 사용하도록 jshashtable을 업데이트 할 수 있습니다. – Raynos

+0

@ 레이 노스 : 흥미 롭습니다. 확실히 일반 웹에서 사용할 수있는 아주 먼 길. jshashtable에서 사용하는 방법을 살펴 보겠습니다. –

+0

@Raynos : 실제로 jshashtable에서는 WeakMap이 키의 열거를 허용하지 않기 때문에 jshashtable에서 많이 사용되지 않는 것처럼 보입니다. –

관련 문제