[0005·js]sort()整数、浮点数未按大小排序问题

一个js一维整数数组的排序代码如下:

	var arr = [1, 3, 5, 2, 5];
	console.log(arr.sort());
	//输出结果如下:
	//Array(5)
	//0: 1
	//1: 2
	//2: 3
	//3: 5
	//4: 5

而当数组的当整数部分位数不一致时,出现问题的,比如:

	var arr = [1, 30, 5, 2, 5];
	console.log(arr.sort());
	//输出结果如下:
	//Array(5)
	//0: 1
	//1: 2
	//2: 30
	//3: 5
	//4: 5

同样的当数组为一维浮点数时,当整数部分位数一致时,是没有问题的,比如:

	var arr = [1.12, 1.35, 1.01, 1.26, 1.18];
	console.log(arr.sort());
	//输出结果如下:
	//Array(5)
	//0: 1.01
	//1: 1.12
	//2: 1.18
	//3: 1.26
	//4: 1.35

而整数部分位数不一致时,也会出现以下问题。比如:

	var arr = [10.12, 9.23, 10.01, 20.26, 10.18];
	//var arr = ['10.12', '9.23', '10.01', '20.26', '10.18']; //结果一致
	console.log(arr.sort());
	//输出结果如下:
	//Array(5)
	//0: 10.01
	//1: 10.12
	//2: 10.18
	//3: 20.26
	//4: 9.23

这个问题的应当来自于sort()函数的内部机制,这里暂时不去考虑。针对数字排序的问题,采用自定义排序解决,代码如下(一维整数同理可以解决,不再赘述):

	var arr = [10.12, 9.23, 10.01, 20.26, 10.18];
	console.log(arr.sort(function(a,b){return a-b}));
	//输出结果如下:
	//Array(5)
	//0: 9.23
	//1: 10.01
	//2: 10.12
	//3: 10.18
	//4: 20.26

arr.sort()中function(a,b){}方法,其中a、b为数组arr中的任意两个值,方法中return返回值大于0正序排列,小于0倒序排列
*等于0,不为纯数字等问题暂不考虑
至此,解决sort()整数、浮点数未按大小排序问题。欢迎大家对此提出自己的看法,本文会持续更新。

猜你喜欢

转载自blog.csdn.net/HoD_DoH/article/details/92831723
今日推荐