I have recently been working on the issue of js sorting, because database sorting consumes too many resources. If sorting can be transferred to the client, it can greatly reduce server memory consumption. As for the client, in addition to js, it is as. Unfortunately, I am too bad at as, so I can only choose js to study. . . After my testing, the js built-in method sort is very efficient
We know that the sort function is provided by default in js, but by default this function sorts the array contents in ascending order according to the ASCII code. What if we want to sort a two-dimensional array? There is a multi_sort function that can be called in php, but there seems to be no such function in js, but it doesn't matter, because the sort function of js actually also provides parameters to define a comparison function to sort two-dimensional arrays.
1. Sort by value
Suppose there is the following array
var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];
What if we want to sort by the first column of each sub-array? We can define a comparison function:
arr.sort(function(x, y){
return x[0] – y[0];
});
What is the role of the comparison function here? In fact, the array copies the array elements to x and y in sequence. For example, first assign arr[0] to x, arr[1] to y, and then use x[0] – y[0]. According to the returned value, if If the number returned is greater than 0, then put x in the array after y. If the returned number is 0, it will remain unchanged. If it is less than 0, put x in front of y. Then, after the first one is sorted, proceed to the following Sort the two until the entire array is sorted. This is the default ascending comparison function. If you want to sort in descending order, you only need to modify the comparison method to return y[0] – x[0]. Here x[0] means sorting by the first column. We Sorting by other columns can also be done here. The sorting here will modify the array structure of arr by default, so after sorting arr will be an array in ascending order of the first column.
2. Sort by string
If you sort by string, we can use the localeCompare method provided by js,
localeCompare function: use locale-specific To compare two strings sequentially.
The usage rule of localeCompare method is stringObject.localeCompare(target). If stringObject is less than target, localeCompare() returns a number less than 0. If stringObject is greater than target, this method returns a number greater than 0. If the two strings are equal, or there is no difference according to the local sorting rules, this method returns 0. The comparer uses local rules. The local rules mean that the underlying rules of the operating system are used to sort these local characters. By default For example, a comparison using the greater than sign simply compares the unicode numbers of two characters, which is inconsistent with many languages.
For example
var arr = [['中' ,'国'], ['Ah','的'], ['Oh','的']];
arr.sort(function(x, y){
return x[0]. localeCompare(y[0]);
});
The results will be sorted by the pinyin of the Chinese characters in the first column. If it contains English, the default is to put the English in front. If If it is pure English, it will be in alphabetical order, with uppercase letters coming after lowercase letters, so that string sorting can be achieved, including Chinese and Chinese-English mixed sorting. As for sorting in descending order, the method is the same as above, change to return y[0].localeCompare(x[0]);.
In this way, the sorting problem is realized. There are still many places where js two-dimensional array sorting is used. Hope it can help some people
function tblSort(s){
for(r = 0;r < row_len;r ){
arrs[r]=[]
for(c=0;c< cel_len;c ){
arrs[r][c] ={}//Create another object in the two-dimensional array;
arrs[r][c].html = table.rows[r].cells [c].innerHTML//Get the table HTML and put it into an associative array for sorting and displaying on the page; The text content is used for the following judgment; arrs [r][c].text='-1';
[c].text='-2';
}else if(text == ''){
arrs[r][c] rrs[r][c].text=table.rows[r].cells [c].innerText//Get the text content of the table and put it into an associative array. Used for sorting below.
0]['text'])
Reverse order;
if(reve){
arrs.sort(function(x,y){
']) - parseFloat(x[s][' text']) 🎜> arrs.sort(function(x,y){
arrs.sort(function (x,y) { ]) - parseFloat(y[s]['text'])//Sort
//Put the arranged html content into the table
for(r = 0;r < row_len;r ){
for(c=0;c table.rows[ r].cells[c].innerHTML =arrs[ r][c]['html']
🎜>