方法
/*
* 根據某個字段實現對json數組的排序
* @param array 要排序的json數組對象
* @param field 排序字段(此參數必須爲字符串)
* @param reverse 是否倒序(默認爲false)
* @return array 返回排序後的json數組
*/
function jsonSort(array, field, reverse) {
// 數組長度小於2 或 沒有指定排序字段 或 不是json格式數據
if (array.length < 2 || !field || typeof array[0] !== "object") return array;
// 數字類型排序
if (typeof array[0][field] === "number") {
array.sort(function (x, y) { return x[field] - y[field] });
}
// 字符串類型排序
if (typeof array[0][field] === "string") {
array.sort(function (x, y) { return x[field].localeCompare(y[field]) });
}
// 判斷是否需要倒序
if (reverse) {
array.reverse();
}
return array;
}
知識點
localeCompare()
-
定義和用法
用本地特定的順序來比較兩個字符串。 -
語法
stringObject.localeCompare(target)
-
參數
參數 | 描述 |
---|---|
target | 要以本地特定的順序與 stringObject 進行比較的字符串。 |
-
返回值
說明比較結果的數字。如果 stringObject 小於 target,則 localeCompare() 返回小於 0 的數。如果 stringObject 大於 target,則該方法返回大於 0 的數。如果兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0。 -
說明
把 < 和 > 運算符應用到字符串時,它們只用字符的 Unicode 編碼比較字符串,而不考慮當地的排序規則。以這種方法生成的順序不一定是正確的。例如,在西班牙語中,其中字符 “ch” 通常作爲出現在字母 “c” 和 “d” 之間的字符來排序。 -
localeCompare() 方法提供的比較字符串的方法,考慮了默認的本地排序規則。ECMAscript 標準並沒有規定如何進行本地特定的比較操作,它只規定該函數採用底層操作系統提供的排序規則。
sort()
-
定義和用法
sort() 方法用於對數組的元素進行排序。 -
語法
arrayObject.sort(sortby)
-
參數
參數 | 描述 |
---|---|
sortby | 可選。規定排序順序。必須是函數。 |
-
返回值
對數組的引用。請注意,數組在原數組上進行排序,不生成副本。 -
說明
如果調用該方法時沒有使用參數,將按字母順序對數組中的元素進行排序,說得更精確點,是按照字符編碼的順序進行排序。要實現這一點,首先應把數組的元素都轉換成字符串(如有必要),以便進行比較。如果想按照其他標準進行排序,就需要提供比較函數,該函數要比較兩個值,然後返回一個用於說明這兩個值的相對順序的數字。比較函數應該具有兩個參數 a 和 b,其返回值如下:
- 若 a 小於 b,在排序後的數組中 a 應該出現在 b 之前,則返回一個小於 0 的值。
- 若 a 等於 b,則返回 0。
- 若 a 大於 b,則返回一個大於 0 的值。
reverse()
-
定義和用法
reverse() 方法用於顛倒數組中元素的順序。 -
語法
arrayObject.reverse()
-
提示和註釋
註釋:該方法會改變原來的數組,而不會創建新的數組。
實例
初始數據
排序後