javascript sort()排序用法

sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。因为排序是按照字符串UniCode码的顺序进行排序的,所以首先应该把数组元素都转化成字符串(如有必要),以便进行比较。

语法:arrayObject.sort(sortFunction);

参数

  • arrayObj 必选项。任意 Array 对象。
  • sortFunction 可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

注意:sortFunction参数,用来规定排序的顺序,必须是函数。

一、sort()未传参数的使用

例1:arrayObj 均为字符串,则按照字母顺序排序;

var arr = ['ff','ee','xc','uu','kl'];
arr.sort();
console.log(arr);  //输出: ["ee", "ff", "kl", "uu", "xc"]

例2:arrayObj 均为数字或者数字型字符串,则按照字母顺序排序;

var arr = ['33',68,'65',325,'648'];
arr.sort();
console.log(arr);  //输出:[325, "33", "648", "65", 68]

例3:arrayObj 为字母型字符串或者数字或者数字型字符串,则按照字母顺序排序;

var arr = [8,'g',35,'e',5];
arr.sort();
console.log(arr); //输出:[35, 5, 8, "e", "g"]

上面三个例子可以看出,都是按照 unicode码 顺序排序,排序的规则似乎不是自己想要的,不着急,接下来我们来看看 sort 的参数 sortFunction 怎么来配合使用。

二、sort()传参数的使用

sortFunction 该函数需要比较两个值的大小,然后返回比较的结果,用于表明相对顺序。

  • 负值,如果所传递的第一个参数比第二个参数小。
  • 零,如果两个参数相等。
  • 正值,如果第一个参数比第二个参数大。

形象说法为:函数有两个参数 a 和 b 进行比较,如下:

  • 若 a - b 小于零,则返回一个小于零的值,数组将按照升序排列。
  • 若 a = b,则返回 0。
  • 若 a - b 大于零, 则返回一个大于零的值,数组将按照降序排列。

例1:arrayObj 均为字符串,则不做任何排序操作

var arr = ['ww','ff','dd','kk'];
function compare(a,b){
    return a-b;
}
console.log(arr.sort(compare)); //输出:["ww", "ff", "dd", "kk"]
var arr = ['ww','ff','dd','kk'];
function compare(a,b){
    return b-a;
}
console.log(arr.sort(compare)); //输出:["ww", "ff", "dd", "kk"]

例2:arrayObj 为字母型字符串或者数字型字符串,则不做任何排序操作

var arr = ['w',5,'d',2];
function compare(a,b){
    return a-b;
}
console.log(arr.sort(compare)); //输出:["w", 5, "d", 2]
var arr = ['w',5,'d',2];
function compare(a,b){
    return b-a;
}
console.log(arr.sort(compare)); //输出:["w", 5, "d", 2]

例3:arrayObj 均为数字或者数字型字符串,则按规则排序

var arr = [5,'3',6,'8',2];
function compare(a,b){
    return a-b;
}
console.log(arr.sort(compare)); //输出:[2, "3", 5, 6, "8"]
var arr = [5,'3',6,'8',2];
function compare(a,b){
    return b-a;
}
console.log(arr.sort(compare)); //输出: ["8", 6, 5, "3", 2]

以上例子可以看出 ,只有数字和数字型字符串才能进行比较;在使用时需要注意 sortFunction 参数的规则;

三、sort() 参数 sortFunction 扩展

上面的例子都是单一的数组格式。在实际应用中,尤其是在数据交互中,后端会返回 json 格式的数据; 那么对于这种数据,我们该如何判断呢?请看下面这个例子:

var obj = [
	{username:'张三',age:40,sex:1},
	{username:'李四',age:35,sex:2},
	{username:'王五',age:45,sex:1}
];
function compare(key){
	return function(a,b){  //此时的a和b对应的是obj当中的元素
		var val1 = a[key];
		var val2 = b[key];
		return val1-val2;
    }
}
console.info(obj.sort(compare('age')));
/*输出:[
				{username: "李四", age: 35, sex: 2},
				{username: "张三", age: 40, sex: 1},
				{username: "王五", age: 45, sex: 1}
			 ]
*/

关于的 sort() 的用法就介绍到这里,如果你有更多关于sort()的用法,愿你能予以补充!谢谢!