欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

json数据根据某一个字段进行排序

程序员文章站 2022-04-15 14:45:33
...

方法

/*
 *  根据某个字段实现对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()

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

实例

初始数据
json数据根据某一个字段进行排序
排序后
json数据根据某一个字段进行排序

相关标签: Web开发

上一篇: MyBatis 级联查询

下一篇: Linq