JS:二維數組排序和獲取子級元素


JS:二維數組排序和獲取子級元素

1. 二維數組排序

1.按數值排序
1 var arr = [[1, 2, 3], [7, 2, 3], [3, 2, 3]];

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

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

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

2.按字符串排序

localeCompare作用:用本地特定的順序來比較兩個字符串。 localeCompare方法的使用規則是:stringObject.localeCompare(target),如果 stringObject 小於 target,則localeCompare()返回小於0的數。如果 stringObject 大於 target,則該方法返回大於 0 的數。如果兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0,本地規則意思就是使用操作系統底層對這些本地字符排序的規則進行排序,默認情況下比如使用大於號這樣的比較只是純粹比較兩個字符的unicode的數大小,會與很多語言不符。

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

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

2. 獲取子級元素

用childNodes獲取子元素在FF瀏覽器下會把中間的空格和換行當做一個文本節點返回,因此可以用節點類型判斷去掉空文本或者用下面的函數返回不含內容為空的子元素們~~

1 function del_ff(elem){
2     var elem_child = elem.childNodes;
3     for(var i=0; i<elem_child.length;i++){
4       //當元素里面有節點類型是文本並且文本類型節點的節點值是空的,就把它刪除。(這里if判斷有點小疑問,為什么要取反啊)
5         if(elem_child[i].nodeName == "#text" && !/\s/.test(elem_child.nodeValue)){
6             elem.removeChild(elem_child[i])
7         }
8     }
9 }

參考:
http://m.jb51.net/article/46162.htm

http://www.voidcn.com/blog/qq285679784/article/p-5925305.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM