2013-03-25 3 views
2

으로는 내 시나리오와이자바 스크립트 2D 배열 - 수치

(예 : Sort a 2D array by the second value로) 내가 설명 할 것입니다 해결하는 방법을 잃은 또 다른이 질문에 유사한 게시물의 몇 가지 있지만, 아무도 일을 본 적이 JavaScript 내에서 직면하고있는 문제 -

두 개의 배열이 있는데, 타사 제품에서 차트를 만드는 데 사용하고 있습니다. 나는 다음과 같은 변수를 가지고있다;

라벨 [ "스톡 A", "주식 B", "주식 C", "주식 D"]

값 [ "200", "1000", "900", "800"]

I는 2 차원 배열이 부탁

정렬 [ "스톡 B 1000", "주식 C, 900", "주식 D, 800", "주식 A, 200"]

I 원하는 가능한 경우 숫자 값으로 정렬합니다. 문제는 위에 게시 된 질문에서 솔루션을 사용할 때 값을 다른 하나의 값과 비교한다는 것입니다. 배열에 이미 저장된 각 값을 검토하는 데 필요합니다.

나는 지난 주 어딘가에서 정말 길다란 길을 찾았지만, 서로의 옆에 100, 1000 같은 값을 정렬하고 있었다. 나는 정수 등이 아니라 행운이 없다고 생각했다. 금요일에 분노한 코드를 삭제했습니다.

나는 거기에있는 어떤 종류의 영혼이 새로운 코더를 도울 수 있기를 바랬다. O 값은 문자열로 전달되므로 int로 변환해야합니다.

배열에 무제한의 항목이 있으며, 올바르게 정렬 한 후에는 상위 10 개를 유지 한 다음 다른 그룹을 합계 그룹으로 그룹화해야하므로 11 개의 항목이 있습니다. 그러나 나는 그것을 해결할 수 있기 전에 정렬 할 필요가있다.

미리 감사드립니다.

답변

4

는 그 문자열의 단일 차원 배열의, 2 차원 배열이 아닌의 2 차원 배열

sorted["Stock B, 1000","Stock C, 900", "Stock D, 800", "Stock A, 200"]

이 싶습니다.

sorted = [["Stock B", 1000], ["Stock C", 900], ["Stock D", 800], ["Stock A", 200]]; 

...이 같은 두 번째 값으로 정렬 할 수 있습니다 : 이것은 2 차원 배열 될 것이다

sorted.sort(function(a, b) { 
    var avalue = a[1], 
     bvalue = b[1]; 
    if (avalue < bvalue) { 
     return -1; 
    } 
    if (avalue > bvalue) { 
     return 1; 
    } 
    return 0; 
}); 

하지만 객체의 단일 차원 배열에 더 좋을 수도 있습니다 : 당신이 이런 식으로 정렬 할 수 있습니다

sorted = [ 
    {name: "Stock B", quantity: 1000}, 
    {name: "Stock C", quantity: 900}, 
    {name: "Stock D", quantity: 800}, 
    {name: "Stock A", quantity: 200} 
]; 

... :

sorted.sort(function(a, b) { 
    var avalue = a.quantity, 
     bvalue = b.quantity; 
    if (avalue < bvalue) { 
     return -1; 
    } 
    if (avalue > bvalue) { 
     return 1; 
    } 
    return 0; 
}); 
+0

@TJ - 고맙습니다. 어떻게/왜 a.quantity를 사용하는지 묻습니다. 내보기에서 그것은 가치가있을 것입니까? – 2eus

+0

왜'return (a - b);'가 아닌가? 두 개의 'if'문은 불필요한 것처럼 보입니다. – ErikE

+0

@ErikE : 저는 그런 식으로 쓰는 데 익숙합니다 (예 : 문자열 등). 물론 당신이 옳다. 만약 당신이 숫자를하고 있다면, 당신은 return a.quantity-b.quantity;를 할 수있다. –