国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js sort 二維數(shù)組排序的用法小結

2024-05-06 15:59:51
字體:
來源:轉載
供稿:網(wǎng)友
我們知道在js中默認提供了sort函數(shù),但是這個函數(shù)默認是按照數(shù)組內(nèi)容的ascii碼升序進行排列的,如果我們要對二維數(shù)組排序要如何做呢

最近在搞js 排序的問題,因為數(shù)據(jù)庫排序太耗資源,如果能轉移到客戶端去排序,能大大D減少服務器內(nèi)存消耗。客戶端的話,除了js,就是as了,可惜我as學得太爛,所以只能選擇js來研究研究了。。。經(jīng)過我的測試,js內(nèi)置方法sort的效率非常高

我們知道在js中默認提供了sort函數(shù),但是這個函數(shù)默認是按照數(shù)組內(nèi)容的ascii碼升序進行排列的,如果我們要對二維數(shù)組排序要如何做呢?在php中是有multi_sort函數(shù)可供調用的,但是在js中似乎沒有這種函數(shù),但是沒關系 ,因為js的sort函數(shù)其實也提供了參數(shù)可以定義比較函數(shù)進行二維數(shù)組的排序。

1、按數(shù)值排序
假設有如下數(shù)組

復制代碼 代碼如下:


var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];


這里如果我們要按每個子數(shù)組的第一列來排序要如何做呢,我們可以定義一個比較函數(shù):

復制代碼 代碼如下:


arr.sort(function(x, y){
  return x[0] – y[0];
});


這里的比較函數(shù)的作用是什么呢?其實是數(shù)組依次將數(shù)組元素復制給x,y,比如首先將arr[0]賦給x,arr[1]賦給y,然后用x[0] – y[0],根據(jù)返回的值,如果返回的是大于0的數(shù),那么就把數(shù)組中x放到y(tǒng)的后面,如果返回的是0則不變,小于0則將x放到y(tǒng)的前面,然后第一個排序好之后在進行下面兩個的排序,直到整個數(shù)組排序完成。這是默認升序的比較函數(shù),如果要降序排列則只需修改比較方式,改為 return y[0] – x[0] 即可,這里我們x[0]表示是按第一列進行排序,我們這里也可以按其他列進行排序。這里的排序默認就會修改arr的數(shù)組結構,所以排序完arr就是按第一列升序的數(shù)組了。

2、按字符串排序
按字符串排序的話呢,我們可以利用js提供的localeCompare方法,
localeCompare作用:用本地特定的順序來比較兩個字符串。
localeCompare方法的使用規(guī)則是stringObject.localeCompare(target),如果 stringObject 小于 target,則 localeCompare() 返回小于 0 的數(shù)。如果 stringObject 大于 target,則該方法返回大于 0 的數(shù)。如果兩個字符串相等,或根據(jù)本地排序規(guī)則沒有區(qū)別,該方法返回 0,器比較使用的是本地的規(guī)則,本地規(guī)則意思就是使用操作系統(tǒng)底層對這些本地字符排序的規(guī)則進行排序,默認情況下比如使用大于號這樣的比較只是純粹比較兩個字符的unicode的數(shù)大小,會與很多語言不符。
比如

復制代碼 代碼如下:


var arr = [['中','國'], ['啊','的'], ['哦','的']];
arr.sort(function(x, y){
  return x[0].localeCompare(y[0]);
});


結果就會按第一列中文字的拼音排序,如果含有英文的話,默認是將英文放在前面,如果是純英文的話,會按字母順序來,大寫排在小寫的后面,這樣就可以實現(xiàn)字符串的排序了,包括中文和中英混排。至于要降序排列的話,方法與上面相同,改成return y[0].localeCompare(x[0]); 即可。

這樣排序的問題就實現(xiàn)了,js二維數(shù)組排序用到的地方還是很多的。希望能幫到些人的忙吧

復制代碼 代碼如下:


    function tblSort(s){    
                for(r = 0;r < row_len;r++){
                    arrs[r]=[]
                    for(c=0;c<cel_len;c++){
                        arrs[r][c] ={}//二維數(shù)組里再創(chuàng)建一個對象;
                        arrs[r][c].html = table.rows[r].cells[c].innerHTML//取表格HTML放進一個關聯(lián)數(shù)組里面,用于排序后顯示在頁面上;
                        var text = table.rows[r].cells[c].innerText//取得表格的文字內(nèi)容用于下面的判斷;
                        //檢測可能出現(xiàn)的內(nèi)容如果不是正常的數(shù)據(jù)就變成負數(shù),排在最后面;
                        if(text == '-'){
                            arrs[r][c].text='-1';
                        }else if(text=='重新檢測'){                           
                            arrs[r][c].text='-2';
                        }else if(text=='無百度快照'||text=='無排名數(shù)據(jù)'){
                            arrs[r][c].text='-3'
                        }else if(text == ''){
                            arrs[r][c].text='-4'
                        }else{
                            arrs[r][c].text=table.rows[r].cells[c].innerText//取表格文字內(nèi)容放進一個關聯(lián)數(shù)組里面。用于下面的sort做排序。

                        }
                    }

                }
               //alert(arrs[0][0]['text'])
               //reve判斷當前是正常排序還是反序;
                   if(reve){
                        arrs.sort(function(x,y){
                            return parseFloat(y[s]['text']) - parseFloat(x[s]['text'])                   
                        });
                        reve=0
                    }else{
                        arrs.sort(function(x,y){
                            return parseFloat(x[s]['text']) - parseFloat(y[s]['text'])//排序
                        })
                        reve=1
                    }
                    //將排好的html內(nèi)容放入表格里
                    for(r = 0;r < row_len;r++){
                        for(c=0;c<cel_len;c++){
                             table.rows[r].cells[c].innerHTML =arrs[r][c]['html']
                        }

                    }
            }
        //表格排序結束

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 育儿| 通江县| 措美县| 海原县| 鹿泉市| 通化市| 松滋市| 绥阳县| 罗城| 塔城市| 怀宁县| 辽阳市| 诸城市| 大邑县| 罗田县| 郁南县| 遵义市| 个旧市| 霍州市| 华坪县| 大同市| 内乡县| 灌云县| 洪江市| 霍林郭勒市| 南澳县| 越西县| 嘉荫县| 榆社县| 江油市| 同江市| 法库县| 屏山县| 西峡县| 襄城县| 连平县| 邻水| 鸡西市| 扎鲁特旗| 西乌| 迁西县|