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()

  • 提示和注释
    注释:该方法会改变原来的数组,而不会创建新的数组。

实例

初始数据
在这里插入图片描述
排序后
在这里插入图片描述

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