2017-01-25 10 views
0

"키"배열을 오름차순으로 정렬해야하며 여기에 내가하고있는 일이 있습니다.배열 자바 스크립트에서 객체의 정렬

Surprsingly 첫 번째 배열은 내림차순으로 정렬되고 다음 배열은 오름차순으로 정렬됩니다. 이것에 대한 가능한 이유는 무엇입니까?

var MainObject4 = [{ "mainarray": [{ "Key": [9,768,78] }, 
{ "Key": [9,4,1] },{ "Key": [49,89,54] }] 
}]; 

var first = MainObject4[0]; 
Object.keys(MainObject4[0]).forEach(function (k) { 
    first[k].forEach(function (j) { 
     Object.keys(j).forEach(function (g) { 
        j[g].sort(); 
     },this); 
    },this); 
},this); 

alert(JSON.stringify(MainObject4, 0, 4)); 

예상 출력 : 지금 무엇입니까

[9,78,768] 
[1,4,9] 
[49,54,89] 

출력 :

[768,78,9] 
[1,4,9] 
[49,54,89] 
+1

'[768,78,9]'*는 사전 적으로 정렬되어 있습니다. 비교 함수 (예 : function (x, y) {return x-y; }' – orip

답변

1

당신은 정렬 매개 변수를 비교하는 함수를 추가해야합니다

var MainObject4 = [{ 
 
    "mainarray": [{ 
 
     "Key": [9, 768, 78] 
 
    }, { 
 
     "Key": [9, 4, 1] 
 
    }, { 
 
     "Key": [49, 89, 54] 
 
    }] 
 
}]; 
 

 
var first = MainObject4[0]; 
 

 
Object.keys(MainObject4[0]).forEach(function(k) { 
 
    first[k].forEach(function(j) { 
 
     Object.keys(j).forEach(function(g) { 
 
      j[g].sort(function(a, b) { 
 
      \t return a - b; 
 
      }); 
 
     }, this); 
 
    }, this); 
 
}, this); 
 

 
alert(JSON.stringify(MainObject4, 0, 4));

2

doc of Array.sort()

기본 정렬 순서를 참조 문자열 유니 코드 코드 포인트에 따라입니다 .

가 대신 문자열의 숫자를 비교하는 비교 함수는 단순히에서 B를 뺄 수 있습니다 : 당신이 수를 비교하려는 경우 문서에서 말했듯이

, 당신은, 비교 기능을 제공해야합니다.

1
var MainObject4 = [{ "mainarray": [ 
    { "Key": [9,768,78] }, 
    { "Key": [9,4,1] }, 
    { "Key": [49,89,54] } 
    ] 
}]; 


MainObject4[0].mainarray.forEach(function (j) { 
    Object.keys(j).forEach(function (g) { 
       j[g].sort(function (a, b) { 
      return a - b; 
     }); 
    },this); 
},this); 

alert(JSON.stringify(MainObject4, 0, 4)); 
0

이 때문에 자바 스크립트의 정렬 방법을 무슨 일이 일어나고은 요소를 비교하는 기본 유니 코드로합니다. 숫자를 정렬하려면 요소를 비교하기 위해 콜백 함수를 명시 적으로 작성해야합니다.

var input = [1,20,2,12]; 
 
console.log(input.sort());// prints 1,12,2,20 
 
console.log(input.sort(function(a,b){ 
 
    return a-b; 
 
}));// prints 1,2,12,20

전 를 들어 그래서, 당신은 당신의 종류에 비교 기능을 추가해야합니다. 그게 전부예요

관련 문제