2011-03-17 5 views
5

Javascript에서는 항목을 처리하려는 JSON 객체가 있습니다.어떻게 파이썬의 dict.items()를 자바 스크립트로 복제 할 수 있습니까?

var json = { 
    itema: {stuff: 'stuff'}, 
    itemb: {stuff: 'stuff'}, 
    itemc: {stuff: 'stuff'}, 
    itemd: {stuff: 'stuff'} 
} 

Python에서

print json.items() 
[{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'}] 

이 작업을 js 할 수 있습니까?

+1

나는 아마도 그 배열을 정렬 할 수 있도록 _reason_을 추가해야합니다. (키는 그냥 uid입니다.) 그래서 "associativ 배열의 항목을 정렬하는 방법"을 물어야 했는지도 모릅니다. –

+0

질문이 잘못되었습니다. 파이썬의'dict.items()'는 (키, 값) 튜플리스트를 반환합니다. retval 예제는'dict.values ​​()'에 해당합니다. –

답변

3

불행의 경로이기 때문에, 원하지 않는 Object.prototype을 확장하지 않고 파이썬과 같은 방법으로 할 수 없습니다.

당신은 쉽게 객체를 통해 그 수 루프를 도우미 함수를 작성하고 다음과 같이 그러나 배열에 값을 넣을 수 :

function items(obj) { 
var i, arr = []; 
for(i in obj) { 
    arr.push(obj[i]); 
} 
return arr; 
} 
시는

: JSON은 데이터 형식입니다, 당신이해야하는 객체입니다 정확한.

+0

포인트는 객체 리터럴에 대해 취해 지므로 js에서 너무 밀접하게 연결되어있어 저를 용서할 수 있습니다. –

1

파이썬에서 dict.items은 키와 dict의 값을 모두 포함하는 튜플 목록을 반환합니다. Javascript에는 튜플이 없으므로 중첩 배열이어야합니다.

작은 파이썬 코드를 사용하여 차이점을 보여 주시면 죄송합니다.

>>> {1:2, 2:3}.items() 
[(1, 2), (2, 3)] 
>>> {1:2, 2:3}.values() 
[2, 3] 

내가 허용 대답 파이썬 함수 dict.values의 동등 개체 값의 배열을 반환 참조. 요청되는 내용은 dict.items입니다. 이 작업을 수행하려면 2 개의 요소 배열로 중첩 된 배열을 반복하고 빌드하십시오.

function items(obj){ 

    var ret = []; 
    for(v in obj){ 
     ret.push(Object.freeze([v, obj[v]])); 
    } 
    return Object.freeze(ret); 
} 

나는 현학적하고 파이썬 튜플의 불변성을 모방, 반환 값이 변경되어서는 안된다는 적용 할 Object.freeze에 넣어. 분명히 그것을 꺼내면 여전히 작동합니다.

items의 목적을 다소 어기면 연관성보다는 선형으로 객체를 반복 할 때 사용되며 연관 배열에서 각 요소를 찾기 위해 해시 값을 계산하지 않아야한다는 점에 유의해야합니다 . 신경 쓰이는 작은 물체의 경우 큰 물체의 경우 속도가 느려지고 자바 스크립트에서 원하는 것을 수행하는 데 더 관용적 인 방법이있을 수 있습니다.

또 다른 새로운 방법은 Object.entries()을 사용하여 원하는대로 정확하게 수행하는 것입니다.

Object.entries({1:1, 2:2, 3:3}) 
     .forEach(function(v){ 
      console.log(v) 
     }); 

지원은 설명서에 언급 된 브라우저 버전으로 제한됩니다.

+0

'.hasOwnProperty()'호출을 삭제해야합니다. 장점이 없습니다. – Bergi

+0

아니, 그냥 거기에 꽤 무의미한거야. 어떤 조건이 좋은가요?열거하려는 일반 객체에는 열거 가능한 속성을 상속받지 않습니다. 그리고 당신이 가진 것을 방어하기를 원한다면, 당신은 확실하게'.hasOwnProperty' 속성을 가진 사람들을 방어하고 싶을 것입니다. – Bergi

+0

오, 고마워. 부모 클래스에서 모든 속성을 제외하더라도. 나는 자바 스크립트에서 상대적인 멍청 아서, 그렇게 많이 알지는 못합니다. –

관련 문제