json數據根據某一個字段進行排序

方法

/*
 *  根據某個字段實現對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()

  • 提示和註釋
    註釋:該方法會改變原來的數組,而不會創建新的數組。

實例

初始數據
在這裏插入圖片描述
排序後
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章