반응형
배열이있는 배열을 문자열로 정렬
여러 배열을 포함하는 배열이 있으며 해당 배열 내의 특정 문자열을 기반으로 배열을 정렬하고 싶습니다.
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
반응형
'Program Club' 카테고리의 다른 글
| 자바 스레드가 완료 될 때까지 기다립니다. (0) | 2021.01.05 |
|---|---|
| XML 레이아웃에서 "탭 순서"를 설정할 수 있습니까? (0) | 2021.01.05 |
| Android : 바이트 단위로 파일을 읽는 방법? (0) | 2021.01.05 |
| 장치를 감지하는 방법은 Android 전화 또는 Android 태블릿입니까? (0) | 2021.01.05 |
| JavaScript는 다중 스레드입니까? (0) | 2021.01.05 |