javascript
javascript中对一个对象数组按照对象某个属性进行排序
在javascript中,對象和數(shù)組是兩種不同的類型,這和php中的數(shù)組概念不同。在javascript中,也有一些精妙的算法,用來對一些對象進行排序。我在面試迅雷的時候,也拿到一道題,當時做題的時候考慮到時間,沒有去仔細研究,回來后再讀了一些方法,就知道真正的考點在哪里了。
我們現(xiàn)在有一組“學生”對象,包含“名字,年齡”等屬性,現(xiàn)在要求一個算法,把這些對象放在一個數(shù)組里,可以實現(xiàn)按照年齡對這些對象進行排序。
var sdts = [{name:"小明",age:12},{name:"小紅",age:13},{name:"小花",age:11} ]那么考點在哪里呢?實際上在于數(shù)組對象的sort方法。
Array.sort(fun)fun是一個函數(shù),排序根據(jù)這個函數(shù)返回值來進行判斷,如果返回值小于0表示兩個元素不需要交換位置,1表示要用交互位置,0表示相等,實際上<=0等效。
sort方法有兩個注意點:
想要完成值比較排序,必須傳入sort參數(shù)(函數(shù))進行規(guī)制制定:
function sortRule(a,b) {return a-b; // 如果a>=b,返回自然數(shù),不用交換位置 } arr1.sort(sortRule);但是,如果遇到我們上面題目中一樣,每個元素并非是數(shù)組,而是對象,那應該怎么去處理呢?其實道理是一樣的,只不過我們要在規(guī)制函數(shù)中重新編寫一個適合對象的規(guī)制:
functon sortRule(a,b) {return a.age - b.age; }當然,這樣寫會遇到一些問題,這是我們在明確知道要進行排序的對象數(shù)組的情況,倘若對象數(shù)組元素不存在age屬性,那就會報錯了,因此,你在撰寫自己的規(guī)則時,應該更加豐富它的規(guī)則判斷。
加入我們現(xiàn)在不規(guī)定按照哪一個屬性排序,比如除了age屬性,我們還有學生的分數(shù)score屬性,我們偶爾需要按照年齡排序,偶爾又需要按照score排序,希望能重復用這個算法,應該怎么辦呢?
function sortBy(field) {return function(a,b) {return a[field] - b[field];} } arr1.sort(sortBy("score"));沒錯,核心的代碼就這么簡單了,一些可能拋出錯誤的判斷,自己去考慮吧。在這種想法下面,我們還可以做一個設想:假如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"));沒錯,其實也就這么簡單,你甚至可以使用argments來獲取更多的參數(shù),用以傳入更多的字段作為判斷條件。
?
轉載來自:http://www.tangshuang.net/2406.html
總結
以上是生活随笔為你收集整理的javascript中对一个对象数组按照对象某个属性进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ES5 getter setter
- 下一篇: 你会用JSON.stringify()?