>  기사  >  웹 프론트엔드  >  JavaScript가 sort() 메서드를 사용하여 다차원 배열과 객체 배열을 정렬하는 방법에 대한 자세한 설명

JavaScript가 sort() 메서드를 사용하여 다차원 배열과 객체 배열을 정렬하는 방법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-25 15:28:153437검색

sort() 메서드는 배열 요소를 정렬하는 데 사용됩니다. 구문은 다음과 같습니다.

arrayObject.sort(sortby)

반환 값은 배열에 대한 참조입니다. 배열은 원래 배열에 따라 정렬되며 복사본이 만들어지지 않습니다.

이 메서드를 매개 변수 없이 호출하면 배열의 요소가 알파벳순, 더 정확하게는 문자 인코딩 순서로 정렬됩니다. 이를 달성하려면 먼저 비교를 위해 배열 요소를 문자열(필요한 경우)로 변환합니다.

다른 기준으로 정렬하려면 두 값을 비교하고 두 값의 상대적 순서를 설명하는 숫자를 반환하는 비교 함수를 제공해야 합니다. 비교 함수에는 두 개의 매개변수 a와 b가 있어야 하며 반환 값은 다음과 같습니다.

a가 b보다 작으면 정렬된 배열에서 a가 b 앞에 나타나야 하고 0보다 작은 값을 반환합니다.
a가 b와 같으면 0을 반환합니다.
a가 b보다 크면 0보다 큰 값을 반환합니다.


function NumAscSort(a,b)
{
 return a - b;
}
function NumDescSort(a,b)
{
 return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801); 
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);

sort(fun)은 두 숫자의 크기를 비교하는 정렬 기능을 허용합니다. 실제로 객체 배열 정렬의 원리는 동일합니다.
숫자의 크기를 비교하지 않는 경우 다음과 같이 할 수 있습니다.


var myarray=["Apple", "Banana", "Orange"]
myarray.sort()

배열이 직접 sort()를 호출한 후 배열은 배열의 요소를 알파벳 순서로 정렬합니다. 정렬할 문자 인코딩 순서입니다.
객체 배열 정렬을 위해 먼저 비교 함수를 구성하는 함수를 작성합니다.


//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name){
 return function(o, p){
   var a, b;
   if (typeof o === "object" && typeof p === "object" && o && p) {
     a = o[name];
     b = p[name];
     if (a === b) {
       return 0;
     }
     if (typeof a === typeof b) {
       return a < b ? -1 : 1;
     }
     return typeof a < typeof b ? -1 : 1;
   }
   else {
     throw ("error");
   }
 }
}

정렬할 배열:


var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}

함수 직접 호출:


employees.sort(by("age"));

여기, 객체 배열 정렬은 기본적으로 이루어집니다. 그렇다면 다중 키 값 정렬을 구현하는 방법은 무엇입니까? 즉, 나이를 먼저 정렬하고, 나이가 같으면 이름을 비교한다는 의미입니다.
이제 두 번째 매개변수를 허용할 수 있도록 by 함수를 추가로 수정할 수 있습니다. 주요 키 값이 일치하는 항목을 생성하면 승자를 결정하기 위해 또 다른 비교 메서드가 호출됩니다.


//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
var by = function(name,minor){
 return function(o,p){
   var a,b;
   if(o && p && typeof o === &#39;object&#39; && typeof p ===&#39;object&#39;){
     a = o[name];
     b = p[name];
     if(a === b){
       return typeof minor === &#39;function&#39; ? minor(o,p):0;
     }
     if(typeof a === typeof b){
       return a < b ? -1:1;
     }
     return typeof a < typeof b ? -1 : 1;
   }else{
     thro("error");
   }
 }
}

employees.sort(by(&#39;age&#39;,by(&#39;name&#39;)));

자, 이제 안심하고 사용하실 수 있습니다. 이해가 되지 않으면 by 함수를 애플리케이션에 직접 복사하고 직접 호출할 수 있습니다.

위 내용은 JavaScript가 sort() 메서드를 사용하여 다차원 배열과 객체 배열을 정렬하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.