저는 최근 js 정렬 문제에 대해 연구하고 있습니다. 왜냐하면 데이터베이스 정렬이 너무 많은 리소스를 소비하기 때문입니다. 정렬을 클라이언트에 전달할 수 있다면 서버 메모리 소비를 크게 줄일 수 있습니다. 클라이언트의 경우 js 외에 as도 있는데 아쉽게도 as가 너무 서툴러서 js만 선택해서 공부하게 되네요. . . 테스트한 결과, js 내장 메소드 정렬이 매우 효율적이었습니다
js에는 기본적으로 정렬 기능이 제공되는 것으로 알고 있는데, 기본적으로 이 기능은 배열 내용을 ASCII 코드에 따라 오름차순으로 정렬합니다. PHP에는 호출할 수 있는 multi_sort 함수가 있는데 js에는 그런 함수가 없는 것 같은데 별 문제가 되지 않습니다. 왜냐하면 js의 sort 함수는 실제로 2차원 정렬을 위한 비교 함수를 정의하는 매개변수도 제공하기 때문입니다. 배열.
1. 값으로 정렬
다음 배열이 있다고 가정합니다
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
각 하위 배열의 첫 번째 열을 기준으로 정렬하려면 어떻게 해야 할까요?
arr.sort(function(x, y){
return x[0] – y[0];
});
여기서 비교 기능의 역할은 무엇인가요? 실제로 배열은 배열 요소를 x와 y에 순차적으로 복사합니다. 예를 들어 먼저 x에 arr[0]을 할당하고 y에 arr[1]을 할당한 다음 x[0] – y[0]을 사용합니다. 반환된 값이 0보다 크면 배열의 y 뒤에 x를 배치하고, 반환된 숫자가 0보다 작으면 x를 y 앞에 배치합니다. , 첫 번째 항목이 정렬된 후 전체 배열이 정렬될 때까지 두 항목을 정렬하는 다음 단계를 진행합니다. 이것은 기본 오름차순 비교 함수입니다. 내림차순으로 정렬하려면 y[0] – x[0]을 반환하도록 비교 방법만 수정하면 됩니다. 여기서 x[0]은 첫 번째 열을 기준으로 정렬하는 것을 의미합니다. 다른 열을 기준으로 정렬하는 것도 여기에서 수행할 수 있습니다. 여기서 정렬하면 기본적으로 arr의 배열 구조가 수정되므로 정렬 후 arr은 첫 번째 열의 오름차순 배열이 됩니다.
2. 문자열로 정렬
문자열로 정렬하는 경우 js에서 제공하는 localeCompare 메소드를 사용할 수 있습니다.
localeCompare 함수: 로케일별 사용 두 문자열을 순차적으로 비교합니다.
localeCompare 메소드의 사용 규칙은 stringObject.localeCompare(target)입니다. stringObject가 target보다 작으면 localeCompare()는 0보다 작은 숫자를 반환합니다. stringObject가 target보다 큰 경우 이 메서드는 0보다 큰 숫자를 반환합니다. 두 문자열이 동일하거나 로컬 정렬 규칙에 따라 차이가 없으면 이 메서드는 0을 반환합니다. 비교자는 로컬 규칙을 사용합니다. 로컬 규칙은 운영 체제의 기본 규칙을 사용하여 이러한 로컬 문자를 정렬한다는 의미입니다. 예를 들어, 보다 큼 기호를 사용하는 비교는 단순히 두 문자의 유니코드 숫자를 비교하는 것이므로 많은 언어와 일치하지 않습니다.
예를 들어
var arr = [ ['中' ,'국'], ['아','적'], ['오','적']];
arr.sort(function(x, y){
return x [0].localeCompare(y[0]);
});
결과는 첫 번째 열에 있는 한자의 병음에 따라 정렬됩니다. 기본은 영어를 앞에 놓는 것인데, 순수 영어라면 알파벳순으로 소문자 뒤에 대문자가 오도록 하므로 중국어, 한-영 혼합 정렬 등 문자열 정렬이 가능하다. 내림차순 정렬 방법은 위와 동일하며 return y[0].localeCompare(x[0]);로 변경합니다.
이런 식으로 정렬 문제가 실현됩니다. 아직도 js의 2차원 배열 정렬이 사용되는 곳이 많습니다. 일부 사람들에게 도움이 되기를 바랍니다.
함수 tblSort(s){
for(r = 0;r < row_len;r ){
arrs[r]=[]
for(c=0;c< cel_len;c ){
arrs[r][c] ={}//2차원 배열에 다른 객체를 생성합니다.
arrs[r][c].html = table.rows[r]. 세포 [c].innerHTML//테이블 HTML을 가져와서 페이지에 정렬하고 표시하기 위해 연관 배열에 넣습니다. 텍스트 내용은 다음 판단에 사용됩니다. ';
[c].text='-2';
~ }그렇지 않은 경우(텍스트 == ''){
arrs[c] rrs[r][c].text= table.rows[r].cells [c].innerText//테이블의 텍스트 내용을 가져와서 연관 배열에 넣습니다. 아래 정렬에 사용됩니다.
0]['text'])
~ > ve){
arrs.sort(function(x,y){
']) - ParseFloat(x[s][' text']) 🎜> arrs.sort(x,y){
arrs.sort(function (x,y) { ]) - parsFloat(y[s][' text'])//정렬
//정렬된 HTML 내용을 테이블에 넣습니다
for(r = 0;r < ;r ){
for(c=0;c table.rows[ r].cells[c].innerHTML =arrs[ r][c]['html']
>