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

首頁 > 語言 > JavaScript > 正文

js中的數(shù)組對(duì)象排序分析

2024-05-06 15:27:20
字體:
供稿:網(wǎng)友

一、普通數(shù)組排序  

  js中用方法sort()為數(shù)組排序。sort()方法有一個(gè)可選參數(shù),是用來確定元素順序的函數(shù)。如果這個(gè)參數(shù)被省略,那么數(shù)組中的元素將按照ASCII字符順序進(jìn)行排序。如:

var arr = ["a", "b", "A", "B"];arr.sort();console.log(arr);//["A", "B", "a", "b"]

因?yàn)樽帜窤、B的ASCII值分別為65、66,而a、b的值分別為97、98,所以上面輸出的結(jié)果是 ["A", "B", "a", "b"] 。

  如果數(shù)組元素是數(shù)字呢,結(jié)果會(huì)是怎樣?

var arr = [15, 8, 25, 3];arr.sort();console.log(arr);//[15, 25, 3, 8]

結(jié)果是 [15, 25, 3, 8] 。其實(shí),sort方法會(huì)調(diào)用每個(gè)數(shù)組項(xiàng)的toString()方法,得到字符串,然后再對(duì)得到的字符串進(jìn)行排序。雖然數(shù)值15比3大,但在進(jìn)行字符串比較時(shí)"15"則排在"3"前面。顯然,這種結(jié)果不是我們想要的,這時(shí),sort()方法的參數(shù)就起到了作用,我們把這個(gè)參數(shù)叫做比較函數(shù)。

  比較函數(shù)接收兩個(gè)參數(shù),如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之前則返回一個(gè)負(fù)數(shù),如果兩個(gè)參數(shù)相等則返回0,如果第一個(gè)參數(shù)應(yīng)該位于第二個(gè)之后則返回一個(gè)正數(shù)。例子:

var arr = [23, 9, 4, 78, 3];var compare = function (x, y) {//比較函數(shù) if (x < y) { return -1; } else if (x > y) { return 1; } else { return 0; }}console.log(arr.sort(compare));

結(jié)果為 [3, 4, 9, 23, 78] ,返回了我們想要的結(jié)果。如果要按降序排序,比較函數(shù)寫成這樣即可:

var compare = function (x, y) { if (x < y) { return 1; } else if (x > y) { return -1; } else { return 0; }}

我們并不能用比較函數(shù)比較一個(gè)不能轉(zhuǎn)化為數(shù)字的字符串與數(shù)字的順序:

var arr = ["b", 5];
console.log(arr.sort(compare))

結(jié)果是 ["b", 5] 。因?yàn)楸容^函數(shù)在比較時(shí),會(huì)把先把字符串轉(zhuǎn)化為數(shù)字,然后再比較,字符串b不能轉(zhuǎn)化為數(shù)字,所以就不能比較大小。然而,當(dāng)不用比較函數(shù)時(shí),會(huì)比較ASCII值,所以結(jié)果是 [5, "b"] 。

二、數(shù)組對(duì)象排序

  如果數(shù)組項(xiàng)是對(duì)象,我們需要根據(jù)數(shù)組項(xiàng)的某個(gè)屬性對(duì)數(shù)組進(jìn)行排序,要怎么辦呢?其實(shí)和前面的比較函數(shù)也差不多:

var arr = [{name: "zlw", age: 24}, {name: "wlz", age: 25}];var compare = function (obj1, obj2) { var val1 = obj1.name; var val2 = obj2.name; if (val1 < val2) { return -1; } else if (val1 > val2) { return 1; } else { return 0; }  } console.log(arr.sort(compare));

輸出結(jié)果為 [Object { name="wlz", age=25}, Object { name="zlw", age=24}] ,可以看到數(shù)組已經(jīng)按照 name 屬性進(jìn)行了排序。我們可以對(duì)上面的比較函數(shù)再改造一下:

var compare = function (prop) { return function (obj1, obj2) { var val1 = obj1[prop]; var val2 = obj2[prop];if (val1 < val2) {  return -1; } else if (val1 > val2) {  return 1; } else {  return 0; }   } }            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 涟源市| 太白县| 香港| 德惠市| 蓬溪县| 尼勒克县| 东丽区| 拉萨市| 固阳县| 利川市| 乃东县| 新蔡县| 远安县| 东平县| 兴仁县| 老河口市| 临武县| 科尔| 洛宁县| 宁蒗| 桐城市| 榆树市| 鄂托克前旗| 广平县| 琼海市| 广灵县| 安义县| 万山特区| 江源县| 天祝| 金乡县| 会东县| 南投市| 克拉玛依市| 财经| 五大连池市| 南川市| 永清县| 上犹县| 宁夏| 溧阳市|