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()
-
提示和注释
注释:该方法会改变原来的数组,而不会创建新的数组。
实例
初始数据
排序后
上一篇: MyBatis 级联查询
下一篇: Linq