JavaScript基本知识
數組的排序
JavaScript可以實現多維數組,對象數組等排序,語法如下
arrayobj.sort(sortfunction) 參數
arrayObj 必選項。任意 Array 對象。
sortFunction 可選項。是用來確定元素順序的函數的名稱。如果這個參數被省略,那么元素將按照 ASCII 字符順序進行升序排列。
說明
sort 方法將 Array 對象進行適當的排序;在執行過程中并不會創建新的 Array 對象。 如果為 sortfunction 參數提供了一個函數,那么該函數必須返回下列值之一:
負值,如果所傳遞的第一個參數比第二個參數小。
零,如果兩個參數相等。
正值,如果第一個參數比第二個參數大 不會創建新的Array對象即數組在原數組上進行排序,不生成副本。如果調用sort方法時沒有使用參數,將按字母的順序進行排序,即元素將按照 ASCII 字符順序進行升序排列。
如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然后返回一個用于說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的數組中 a 應該出現在 b 之前,則返回一個小于 0 的值。
- 若 a 等于 b,則返回 0。
- 若 a 大于 b,則返回一個大于 0 的值。
//數值排序 function SortNumByAsc(a ,b) {return a - b; } function SortNumByDesc(a, b) {return b - a; }var nArr = new Array(8, -6, 9, 20, -3, 5, 18, 12); nArr.sort(SortNumByAsc);
console.info(nArr); //-6, -3, 5, 8, 9, 12, 18, 20 nArr.sort(SortNumByDesc); console.info(nArr); //20, 18, 12, 9, 8, 5, -3, -6
sort(fun)接受了比較2個數值大小的函數,如果不比較數值的大小,如下
var phone = ["Apple", "Android", "WP7"]; phone.sort();
console.info(phone); //"Android", "Apple", "WP7"
數組直接調用sort后,數組按字母的順序對數組中的元素進行排序,但如果是一個JSON數組如下
var person = [];person[0] = { name: "Irving",age: 22, hobby: "eat" };person[1] = { name: "Jimmy", age: 27, hobby: "read" };person[2] = { name: "Rain", age: 18, hobby: "sleep" };
現要根據age的大小對person排序,同樣需要構造個對象數組排序的函數,如下
//單鍵排序 function SortByTagName(name) {return function (o, p) {var a, b;if (typeof o === "object" && typeof p === "object" && o && p) {a = o[name];b = p[name];if (a === b) {return 0;}if (typeof a === typeof b) {return a < b ? -1 : 1;}return typeof a < typeof b ? -1 : 1;}else {throw ("error");}} }
調用下吧
var person = [{ name: "Irving", age: 22, hobby: "eat" },{ name: "Jimmy", age: 27, hobby: "read" },{ name: "Rain", age: 18, hobby: "sleep" }];person.sort(SortByTagName("age")); //根據age排序console.info(person[0]); //{ name="Rain", age=18, hobby="sleep"}
這里,對象排序就基本實現了,那么可以實現像MSSQL中order by age ,name 一樣排序嗎,即先是對age排序,如果age相同,再比較name,必須可以,改造上述函數如下
//多鍵排序 (def可選參數) function SortByTagName(name, def) {return function (o, p) {var a, b;if (o && p && typeof o === 'object' && typeof p === 'object') {a = o[name];b = p[name];if (a === b) {return typeof def === 'function' ? def(o, p) : 0;}if (typeof a === typeof b) {return a < b ? -1 : 1;}return typeof a < typeof b ? -1 : 1;} else {throw ("error");}} }
調用
person.sort(SortByTagName("age", SortByTagName("name"))); //,SortByTagName("name") 可選參數 運用上述方法就可以隨便排序了,這里介紹個JQ插件 Jquery.tinysort ,
舉個列子
<ul class="xmpl" id="xnum"><li>unrennef</li><li>eisuqjios</li><li>241</li><li>20.6</li><li>851</li><li>65.3</li> </ul>
只需調用 即可實現對li中的數值排序
$('ul#xnum>li').tsort(); 結果
<ul id="xnum" class="xmpl"><li>20.6</li><li>65.3</li><li>241</li><li>851</li><li>eisuqjios</li><li>unrennef</li> </ul>
API:http://tinysort.sjeiti.com/
?
修訂記錄
2012年6月21日18:48:23 開篇?? 數組的排序
?
轉載于:https://www.cnblogs.com/Irving/archive/2012/06/22/2558648.html
總結
以上是生活随笔為你收集整理的JavaScript基本知识的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用JPA注解标注多对多的关系
- 下一篇: C#条件判断-根据条件判断要走的路-if