日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript中对一个对象数组按照对象某个属性进行排序

發(fā)布時(shí)間:2023/12/10 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript中对一个对象数组按照对象某个属性进行排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在javascript中,對(duì)象和數(shù)組是兩種不同的類型,這和php中的數(shù)組概念不同。在javascript中,也有一些精妙的算法,用來對(duì)一些對(duì)象進(jìn)行排序。我在面試迅雷的時(shí)候,也拿到一道題,當(dāng)時(shí)做題的時(shí)候考慮到時(shí)間,沒有去仔細(xì)研究,回來后再讀了一些方法,就知道真正的考點(diǎn)在哪里了。

我們現(xiàn)在有一組“學(xué)生”對(duì)象,包含“名字,年齡”等屬性,現(xiàn)在要求一個(gè)算法,把這些對(duì)象放在一個(gè)數(shù)組里,可以實(shí)現(xiàn)按照年齡對(duì)這些對(duì)象進(jìn)行排序。

var sdts = [{name:"小明",age:12},{name:"小紅",age:13},{name:"小花",age:11} ]

那么考點(diǎn)在哪里呢?實(shí)際上在于數(shù)組對(duì)象的sort方法。

Array.sort(fun)

fun是一個(gè)函數(shù),排序根據(jù)這個(gè)函數(shù)返回值來進(jìn)行判斷,如果返回值小于0表示兩個(gè)元素不需要交換位置,1表示要用交互位置,0表示相等,實(shí)際上<=0等效。

sort方法有兩個(gè)注意點(diǎn):

  • 會(huì)操作原始數(shù)組,經(jīng)過操作后原始數(shù)組發(fā)生變化
  • 默認(rèn)排序按照字符編碼排序,例如,我們有下面的一個(gè)例子:
  • var arr1 = [14,23,11,6,87,67]; arr1.sort();// [11,14,23,6,67,87] 按字符而非數(shù)值排序

    想要完成值比較排序,必須傳入sort參數(shù)(函數(shù))進(jìn)行規(guī)制制定:

    function sortRule(a,b) {return a-b; // 如果a>=b,返回自然數(shù),不用交換位置 } arr1.sort(sortRule);

    但是,如果遇到我們上面題目中一樣,每個(gè)元素并非是數(shù)組,而是對(duì)象,那應(yīng)該怎么去處理呢?其實(shí)道理是一樣的,只不過我們要在規(guī)制函數(shù)中重新編寫一個(gè)適合對(duì)象的規(guī)制:

    functon sortRule(a,b) {return a.age - b.age; }

    當(dāng)然,這樣寫會(huì)遇到一些問題,這是我們?cè)诿鞔_知道要進(jìn)行排序的對(duì)象數(shù)組的情況,倘若對(duì)象數(shù)組元素不存在age屬性,那就會(huì)報(bào)錯(cuò)了,因此,你在撰寫自己的規(guī)則時(shí),應(yīng)該更加豐富它的規(guī)則判斷。

    加入我們現(xiàn)在不規(guī)定按照哪一個(gè)屬性排序,比如除了age屬性,我們還有學(xué)生的分?jǐn)?shù)score屬性,我們偶爾需要按照年齡排序,偶爾又需要按照score排序,希望能重復(fù)用這個(gè)算法,應(yīng)該怎么辦呢?

    function sortBy(field) {return function(a,b) {return a[field] - b[field];} } arr1.sort(sortBy("score"));

    沒錯(cuò),核心的代碼就這么簡(jiǎn)單了,一些可能拋出錯(cuò)誤的判斷,自己去考慮吧。在這種想法下面,我們還可以做一個(gè)設(shè)想:假如score相等的情況下,我們是否可以按照年齡的大小排序輸出?

    function sortBy(field1,field2) {return function(a,b) {if(a.field1 == b.field1) return a.field2 - b.field2;return a.field1 - b.field1;} } arr1.sort(sortBy("score","age"));

    沒錯(cuò),其實(shí)也就這么簡(jiǎn)單,你甚至可以使用argments來獲取更多的參數(shù),用以傳入更多的字段作為判斷條件。

    ?

    轉(zhuǎn)載來自:http://www.tangshuang.net/2406.html

    總結(jié)

    以上是生活随笔為你收集整理的javascript中对一个对象数组按照对象某个属性进行排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。