2012-05-18 3 views
12

지금이 작업을 시도하고 있는데 문자로 구분 된 문자열에 연관 배열 (값)을 결합하는 "가장 많이 사용되는"방법이 있는지 궁금합니다.연관 배열을 문자열에 결합하는 방법

var AssocArray = { id:0, status:false, text:'apple' }; 

문자열은 우리가 ","문자 어떤 생각으로 그들과 합류하는 경우

"0, false, 'apple'" or "0, 0, 'apple'" 

일 할이 객체의 요소를 결합의 결과 예를 들어, 내가있다? 감사!

+1

이렇게 할 수있는 기본 제공 방법이 없습니다. 코드의 짧은 부분을 작성하십시오. 'for ... in' 루프에 의해 반환 된 프로퍼티의 순서는 예측할 수 없으므로 값을 정렬하는 정식 방법을 강요하고 싶다면 스스로 생각해야합니다. – Pointy

답변

9

배열을 반복하면됩니다.

var AssocArray = { id:0, status:false, text:'apple' }; 
    var s = ""; 
    for (var i in AssocArray) { 
     s += AssocArray[i] + ", "; 
    } 
    document.write(s.substring(0, s.length-2)); 

윌 출력 : 등등 0, false, apple

+1

'i AssocArray'는 전역 네임 스페이스를 오염시키지 않도록 'AssocArray에서'var i '이어야합니다. – pseudosavant

+0

사실,이 예제에서는 고려하지 않은 것입니다. – Hidde

+0

아마도 다음과 같이 'hasOwnProperty'를 사용하여 검사를 추가해야합니다. 'for (var Ass in AssocArray) { ** if (AssocArray hasOwnProperty (i)) ** s + = AssocArray [i] + ","; } ' 참조 : http://stackoverflow.com/questions/921789/how-to-loop-through-plain-javascript-object-with-objects-as-members –

17
Object.keys(AssocArray).map(function(x){return AssocArray[x];}).join(','); 

PS :이 Object.values 방법은 곳이지만, 표준이 아니다. 그리고 hashish과 같은 외부 라이브러리도 있습니다.

+2

나는 단 하나의 라이너를 정말 좋아하지만 두 가지를 염두에 두어야한다. IE <9에서는 작동하지 않고'map'을 사용하면 매우 큰 오브젝트에서 느려질 수있다. – MaxArt

+1

1) 호환성 라이브러리가있는 IE <9에서 작동합니다. 2) 문자열 연결이 너무 느리다. 그래서 정말로 큰 객체의 경우 node.js의 스트림과 같은 또 다른 접근법을 사용해야한다. (실제로는 문제가되지 않는다.) – alex

+1

ali는 다른 라이브러리를 사용하는 것에 대해서는 전혀 말하지 않았다. 호출 함수는 문자열 연결보다 느리며 문자열을 연결하지 않으려는 경우에도 임시 배열을 사용하고 끝에 join을 사용할 수 있습니다. – MaxArt

5

Object.map, Object.forEach 같은 기능의 구현과 여전히 논의되고 자바 스크립트의 모든 배열은 인덱스도 연관 배열을 가지고있다. 지금, 당신은 이런 식으로 뭔가를 고수 할 수

function objectJoin(obj, sep) { 
    var arr = [], p, i = 0; 
    for (p in obj) 
     arr[i++] = obj[p]; 
    return arr.join(sep); 
} 

편집 : 임시 배열을 사용하여 성능 향상을 위해 문자열 연결의 대신에 합류한다.

편집 2 : arr.push(obj[p]); 대신 카운터를 증가의 실제로 최근의 대부분의 브라우저에서빠를 수 있습니다 것으로 보인다. 의견보기.

+0

그냥 사용하지 않는 이유가 있습니다. 'arr [i ++] = obj [p]'대신'arr.push (obj [p])'를 사용 하시겠습니까? – pseudosavant

+0

왜냐하면'push '가 매우 빠르다고하더라도 그럼에도 불구하고 함수를 호출하는 것은 시간이 많이 걸리기 때문입니다.오늘날 많은 브라우저에는 특별한 최적화가되어 있지만, 항상 그런 것은 아닙니다. 또 다른 기술은'new Array (lentgh)'로 원소를 할당하기 전에 배열의 크기를 재조정하는 것을 의미한다. 그러나 'length'가 알려진 경우에만 할 수있다. – MaxArt

+1

조숙 한 최적화 소리가납니다. 이 두 가지 방법 사이의 성능은 많이 달라지며 '가장 좋은'방법은 사용 된 브라우저에 따라 다릅니다. 이 jsperf 예제를 확인하십시오 : http://jsperf.com/array-increment-vs-array-push – pseudosavant

관련 문제