Program Club

배열이있는 배열을 문자열로 정렬

proclub 2021. 1. 5. 08:22
반응형

배열이있는 배열을 문자열로 정렬


여러 배열을 포함하는 배열이 있으며 해당 배열 내의 특정 문자열을 기반으로 배열을 정렬하고 싶습니다.

var myArray = [
                [1, 'alfred', '...'],
                [23, 'berta', '...'],
                [2, 'zimmermann', '...'],
                [4, 'albert', '...'],
              ];

albert 가 먼저 나오고 zimmermann 이 마지막에 오도록 이름별로 정렬하려면 어떻게해야 합니까?

정렬을 위해 정수를 사용할 수 있다면 어떻게 할 것인지 알고 있지만 문자열은 저를 우둔하게 만듭니다.

도와 주셔서 감사합니다! :)


Array.sort메서드 호출에 대한 인수로 지원 함수를 전달하면 됩니다.

이 같은:

 function Comparator(a, b) {
   if (a[1] < b[1]) return -1;
   if (a[1] > b[1]) return 1;
   return 0;
 }

 var myArray = [
   [1, 'alfred', '...'],
   [23, 'berta', '...'],
   [2, 'zimmermann', '...'],
   [4, 'albert', '...'],
 ];

 myArray = myArray.sort(Comparator);
 console.log(myArray);


array.sort()사용자 지정 함수와 함께 계속 사용할 수 있습니다 . 함수 내에서 키로 사용하려는 요소를 비교하기 만하면됩니다. 예를 들어 다음을 사용할 수 있습니다.

myArray.sort(function(a, b) { 
    return a[1] > b[1] ? 1 : -1;
});

이제 더 쉬운 방법이 있습니다.

myArray = myArray.sort(function(a, b) {
    return a[1].localeCompare(b[1]);
})

대소 문자도 구분하지 않습니다.

출처 : https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare


대박! 첫 번째 요소, 두 번째 요소, 세 번째 (이 예에서 모두 오름차순)에 대한 복합 정렬은 다음과 같습니다.

myArray=myArray.sort(function(a,b){
    retVal=0;
    if(a[0]!=b[0]) retVal=a[0]>b[0]?1:-1;
    else if(a[1]!=b[1]) retVal=a[1]>b[1]?1:-1;
    else if(a[2]!=b[2]) retVal=a[2]>b[2]?1:-1;
    return retVal
});

(두 개 이상의 열에 대한 다중 정렬)


ES6에서는 비교적 간결한 작업을 수행 할 수 있습니다.

myArray.sort(([a], [b]) => a.localeCompare(b))

또는

myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)

유용한 / 현대적인 비트는 =>람다 연산자이고 [X]인수 분해입니다.

참조 URL : https://stackoverflow.com/questions/5435228/sort-an-array-with-arrays-in-it-by-string

반응형