資料處理是一門學問,將錯綜複雜轉變為規律協調的過程。

本文將演示如何對JSON Object中依照某個name的value做排序。

簡單介紹 JSON 資料格式

JSON Object:一個物件中包含許多pair,一組pair由一個name對應一個value,包含在 { } 中。

Array:JSON中,陣列是一個value的集合,包含在 [ ] 中。

name & value:鍵與值,不限定一對一,多於一個的value就用array表示。

JSON 排序

接下來示範如何在javascript中排序收到的JSON資料。
以上面的animal資料為例子,如果今天要將animal依照number排序,要怎麼做呢?
很簡單,直接將JSON data存進一個變數中,在對這個變數做排序判斷並回傳即可,請看程式碼演示:

可以看到我們在這一行
output = data.animals.sort(sortItem);
對animals做sort,為什麼這邊要額外call一個function,而不是直接sort()就好呢?
因為在js中如果直接對int做sort的話,是以ASCII來做字符排序,所以像是[1,2,11,22]做sort()的話,結果會是[1,11,2,22],這樣就不是我們要的結果,那麼該怎麼做呢?

解法是這樣,正常的int sort是用以下code實現:

這樣出來的結果就是[1,2,11,22],如果要輸出降冪排序的話,把return a-b改成return b-a就可以。

為什麼用這種方法就可以排序呢?
因為sort()中的function(a,b)是兩兩比較array中的元素,交換位置與否是看return值,如果是正值,就交換,0或負值,則不交換。

所以用上方的animal來看,其中的 sortItem function,
return ((x.number==y.number)?0:((x.number>y.number)?1:-1));
就是先判斷前值與後值是否相同,相同的話回傳0,此時不做交換;如果不同,那麼再判斷前值是否大於後值,如果大於後值,回傳1,此時交換位置,如果小於後值,回傳-1,此時不交換位置。

如此一來就能實現對數字升冪排序或是降冪排序了。

output結果就會是下面這樣:

最後修改日期: 2021-03-31

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。