Javascript: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)

  • 参数

  • 返回值
    说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

    说明
    把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。

    localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。

  • sort()

  • 定义和用法
    sort() 方法用于对数组的元素进行排序。

  • 语法
    arrayObject.sort(sortby)

  • 参数

参数 描述
sortby 可选。规定排序顺序。必须是函数。

  • 返回值
  • 对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
  • 说明

       如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,           是    按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(           如有必要),以便进行比较。

扫描二维码关注公众号,回复: 16250394 查看本文章

       如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个           用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

reverse()

  • 定义和用法
    reverse() 方法用于颠倒数组中元素的顺序。

  • 语法
    arrayObject.reverse()

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

实例

初始数据

 排序后

猜你喜欢

转载自blog.csdn.net/weixin_50114203/article/details/125641333