[javascript] 연관 배열 키 목록 얻기

Javascript에 연관 배열이 있습니다.

var dictionary = {
    "cats": [1,2,3,4,5], 
    "dogs": [6,7,8,9,10]
};

이 사전의 키를 어떻게 얻습니까? 즉 나는 원한다

var keys = ["cats", "dogs"];

7 년 후 편집 : 용어를 올바르게 얻으려면 Javascript에는 ‘associative array’와 같은 것이 없습니다. 기술적으로는 이것이 object우리가 원하는 객체 키입니다.



답변

당신이 사용할 수있는: Object.keys(obj)

예:

var dictionary = {
  "cats": [1, 2, 37, 38, 40, 32, 33, 35, 39, 36],
  "dogs": [4, 5, 6, 3, 2]
};

// Get the keys
var keys = Object.keys(dictionary);

console.log(keys);

브라우저 지원에 대해서는 아래 참조를 참조하십시오. Firefox 4.20, Chrome 5, IE9에서 지원됩니다. 아래 링크에는 Object.keys()브라우저에서 지원되지 않는 경우 추가 할 수있는 코드 스 니펫이 포함되어 있습니다 .

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys


답변

이 시도:

var keys = [];
for (var key in dictionary) {
  if (dictionary.hasOwnProperty(key)) {
    keys.push(key);
  }
}

hasOwnProperty의 프로토 타입 객체에 키를 삽입 할 수 있기 때문에 필요합니다 dictionary. 그러나 일반적으로 이러한 키를 목록에 포함시키지 않으려 고합니다.

예를 들어, 이렇게하면 :

Object.prototype.c = 3;
var dictionary = {a: 1, b: 2};

다음 수행 for...in을 통해 루프를 dictionary당신은 얻을 것이다, a그리고 b,하지만 당신은 얻을 것이다 c.


답변

for (var key in dictionary) {
  // do something with key
}

그것은이다 for..in을 문 .


답변

라이브러리 (jQuery, 프로토 타입 등)를 사용하는 경우 for..in 사용에주의하십시오. 대부분은 생성 된 객체 (사전 포함)에 메소드를 추가하기 때문입니다.

이것은 당신이 그것들을 반복 할 때 메소드 이름이 키로 나타남을 의미합니다. 라이브러리를 사용하는 경우 설명서를보고 열거 가능한 섹션을 찾으십시오. 여기에서 객체를 반복하는 올바른 방법을 찾을 수 있습니다.


답변

간단한 JQUERY 방식.

이것이 내가 사용
하려는 자바 스크립트 사전 객체 인 DictionaryObj를 사용 하는 것입니다. 가치, 핵심은 물론 사전에 그것들의 이름입니다.

 $.each(DictionaryObj, function (key, value) {
            $("#storeDuplicationList")
                .append($("<li></li>")
                .attr("value", key)
                .text(value));
        });


답변

저는 현재 Rob de la Cruz의 답변을 사용하고 있습니다

Object.keys(obj)

그리고 일찍로드 된 파일 에는 Object.keys가 내장되어 있지 않은 이전 버전의 스크립트 인터프리터의 경우를 포괄하는 인터넷의 다른 곳에서 빌린 코드 가 있습니다.

if (!Object.keys) {
    Object.keys = function(object) {
        var keys = [];
        for (var o in object) {
            if (object.hasOwnProperty(o)) {
                keys.push(o);
            }
        }
        return keys;
    };
}

나는 이것이 현대의 간단한 코드와 이전 버전의 브라우저에 대한 이전 버전과 호환되는 지원 등 대규모 프로젝트에서 두 가지 모두에서 최고라고 생각합니다.

Rob de la Cruz의 Object.keys (obj)를 기본적으로 사용할 수없는 경우 JW의 솔루션을 효과적으로 함수에 넣습니다.


답변