2010-01-13 5 views

답변

4

JavaScript에서는 연관 배열이 실제로 존재하지 않습니다. 그러나 자바 스크립트 객체를 사용하여 유사한 기능을 달성 할 수있다 : 키가 조금 소리 객체를 사용

var a = { 
    helloText: "Hello World!" 
}; 

var b = {}; 
b[a] = "Testing"; 

alert(b[a]); // Returns "Testing" (at least, in Safari 4.0.4) 

:

// Create object 
var myObject = { 
    key: value, 
    helloText: "Hello World!" 
}; 

// Access object in some statement via: 
myObject.helloText 
// ...or: 
myObject["helloText"] 

가 키로서 객체를 사용하려면를, 당신은 같이해야 할 것이다 이상한, 그래도. 이 작업을 수행해야합니까?

업데이트 :

당신 실제로 자바 스크립트의 키로서 객체를 사용할 수 없습니다. 위의 코드가 작동하는 이유는 문 b[a] = "Testing";에서 aa.toString()을 통해 "[object Object]"이라는 문자열로 변환하고이 문자열을 키로 사용한다는 것입니다. 그래서 우리의 진술은 실제로 b["[object Object]"] = "Testing";이고 우리의 경고문은 정확히 alert(b["[object Object]"]);과 같습니다.

CMS에게 감사의 말을 전합니다!

업데이트 2 :

Tim Down 자신의 자바 스크립트 라이브러리 jshashtable 당신이 키로서 객체를 사용할 수 있음을 지적한다.

+0

왜 작품? 아주 이상한 – user198729

+7

두 번째 예제처럼 사용 속성 접근 자 (* 괄호 표기법 *)가 내부적으로 속성 표현 (*는 괄호 * 사이에있는)을'String'으로 변환하기 때문에 작동합니다. 예를 들어'b'는''[object Object] ''라는 속성으로 끝납니다 '. 이것은'a'에 적용된'toString' 연산의 결과입니다. 왜냐하면 실제로 더 많은 객체를 추가 할 수 없기 때문입니다 (그들은 단지 그 속성 값을 변경할 것입니다). 'alert (b [ "[object Object]"]);를 시도하면''Testing ''도 표시됩니다. – CMS

+0

임의의 객체를 키로 사용하는 것은 정확히 해시 맵과 연관 배열의 핵심입니다. 그러나 jQuery 객체를 키로 사용하면 가능하지 않더라도 jQuery 객체가 변경 될 수 있으므로 나쁜 생각처럼 들릴 수 있습니다. 열쇠는 DOM 객체의 id와 같이 일정해야합니다. 그리고 그것은 문자열이므로 키로 사용할 수 있습니다. 어쩌면 jquery 선택기를 사용하는 것이 옵션이지만 자바 스크립트 속성 (예 : #,. 및 공백)에서 허용되지 않는 문자를 포함 할 수 있습니다. – mcv

1

객체를 키로 사용할 수 없으며 배열 객체에 속성을 설정하기 때문에 배열에서 객체 배열을 사용할 수 없습니다. 즉, .length으로 루프 할 때 기본적으로 그렇지 않습니다. 설정 한 수동 정의 된 등록 정보를 설명합니다.

개체 리터럴 내부에 배열 및 배열을 모두 저장하는 것이 좋습니다. 예를 들면 : kprime은 당신이 자바 스크립트를 사용하는 경우 .data()를 사용하는 것이 더 좋을 수도,하지만 그의 대답에 언급

var list = [ 
    { 
     el:document.body, 
     arr:[1,2] 
    } 
]; 

for (var i = 0, l = list.length; i<l; ++i) { 
    alert(list[i]['el']) 
    alert(list[i]['arr'][0]) 
} 

// add elements to the array 

list.push({ 
    el:document.body.firstChild, 
    arr:[3,4] 
}) 

으로.

1

그냥 추측하지만 일부 (임의의) 데이터를 jQuery 객체 (가능하면 요소)와 연결하려는 것 같습니다. 이 경우 data() 방법을 사용하지 않으시겠습니까?

$('#el').data (value); 
+1

입니다. jQuery에 대해서도 잊어 버렸습니다. –

+0

글쎄, 질문의 첫 번째 버전에서'key'는 DOM 요소라고 불 렸습니다. 질문은 jquery 태그가 아닙니다. 그것이 우리를 "잘못"하거나 더 귀찮은 트랙으로 만들었습니다. –

0
난 당신이 연관 컨테이너 (JS에서 개체를) 넣어하려는 각 요소에 고유 ID를 할당 제안하고 키와 ID 사용합니다

:

var idCounter = 0; 
var container = { }; 
function storeValue(element, value) { 
    if (!element.getAttribute('id')) { 
     element.setAttribute('id', makeID()); 
    } 
    var id = element.getAttribute('id'); 
    container[id] = value; 
} 
function makeID() { 
    return 'unique-id-' + idCounter++; 
} 

편집 :이 솔루션은 있다고 가정을 jQuery를 사용할 수 없습니다. 그렇다면 data('key', value)을 사용하십시오.

2

jshashtable을 사용하면 JavaScript 개체를 키로 사용할 수 있습니다.것 같다 *

+0

매우 흥미 롭습니다! 링크를 가져 주셔서 감사합니다. – mcv

-1

모든 자바 스크립트 객체가 연관 배열이며,이 언어의 속성 빌드, 당신은 특별한 아무것도 필요하지 않습니다, 단지 * 그

+0

게시 된 첫 번째 답변에 대한 의견보기. –

관련 문제