2012-01-06 3 views
242

JavaScript 객체의 키를 jQuery 또는 순수 JavaScript에서 배열로 가져 오려고합니다.객체 키 배열 얻기

덜 구체적인 방법이 있습니까?

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; 
var keys = []; 
for (var key in foo) { 
    keys.push(key); 
} 
+4

'if (foo.hasOwnProperty (key)) '를 추가하는 것 외에도 내가하는 일이 그 것이다. 또는'$ .map'을 사용하십시오. –

+7

Pythonic 한 - 라이너에 대한 오, 그래도 ... – Richard

+0

전체 답변 가치가없는 오래된 질문이지만, 바이올린을 원하는 사람들을 위해 ... http://jsfiddle.net/LR5D9/3/이 솔루션은 다음을 다룹니다. 'x에 대한 var에 대한 루프를 엉망으로 프로토 타입 선언의 문제 – unsynchronized

답변

435
var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; 
var keys = Object.keys(foo); // ['alpha', 'beta'] 
// (or maybe some other order, keys are unordered). 

사용 Object.keys.

이것은 ES5 기능입니다. 즉, 현대의 모든 브라우저에서 작동하지만 will not work in legacy browsers입니다.

ES5 - 심가있는 implementation of Object.keys you can steal

+5

참고 : 이것은 최신 브라우저에서만 작동합니다 (IE <9가 아니라는 의미입니다). –

+2

그리고 모바일 브라우저는 어떻습니까? –

+1

@SmartyTwiti : 확실하지 않습니다. 나는 그것이 크롬이나 파이어 폭스와 같은 것으로 생각한다. –

51

jQuery의 $.map을 사용할 수 있습니다.

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }, 
keys = $.map(foo, function(v, i){ 
    return i; 
}); 
+2

이 솔루션 (로켓) 괜찮아요 http://jsfiddle.net/KV3RA/3/ – MilkyWayJoe

+2

나에게이 솔루션은 Object.keys() ... IE8에서 작동하지 않습니다. – NLemay

5

내가 대해 덜 자세한 모르지만 나는 그것이 비록 얼마나 파이썬 모른다는 한 줄의 요청에 의해 한 줄에 다음을 강요하는 영감을 얻었다 ;) 물론

var keys = (function(o){var ks=[]; for(var k in o) ks.push(k); return ks})(foo); 
+3

어쩌면'var enumerableKeysOnThePrototypeChain';) – alex

+1

어쩌면 우리는 객체가 완전히 다른 곳에서 가져온 것과 반대로 객체가 완전히 다른 곳에서 가져온 것이 아니라면 hasOwnProperty에 대해 걱정할 필요가 없다는 것을 알 수있을만큼 똑똑 할 수도 있습니다. –

+0

python @ @ alex의 두 번째 대답 (for foo (keys [i ++] in foo) {}')이긴하지만 여전히 Array.push()를 수행하고 있기 때문에 (전체 함수 선언은 말할 필요도 없음). pythonic 구현은 암시 적 이해에 가능한 한 많이 의존해야하며 람다 표현식을 사용하지 않는 것이 좋습니다. – cowbert

22

, Object.keys()는 개체의 키를 얻을 수있는 가장 방법입니다. 귀하의 환경에서 사용할 수 없다면, 예를 들어 shimmed 코드를 사용하면됩니다 (단, 루프가 Object.keys()의 동작과 달리 프로토 타입 체인의 모든 속성을 반복 할 때를 고려해야 함) . 그러나

, 귀하의 예제 코드 ...

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; 
var keys = []; 
for (var key in foo) { 
    keys.push(key); 
} 

jsFiddle.

...을 수정할 수 있습니다. 변수 부분에서 할당 권리를 수행 할 수 있습니다.

var foo = { 'alpha' : 'puffin', 'beta' : 'beagle' }; 
var keys = [], i = 0; 
for (keys[i++] in foo) {} 

jsFiddle.

물론이 동작은 Object.keys()이 실제로하는 것과 다릅니다 (jsFiddle). shim on the MDN documentation을 사용하면됩니다.

+7

나는 이것을 좋아했다. var keys = [], i = 0; for (keys [i ++] in foo) {}'+1 – Jashwant

+0

"in for"은 주문을 보장하지 않는다고 들었는데, Object.keys가 알 수 있습니까? –

+0

@ChrisStephens 키가 정렬 된 배열로 끝나는 경우에도 보장 순서가 아닙니다. – alex