数组Array的排序sort

本文深入探讨了JavaScript中Array对象的sort方法及其排序原理,解释了默认排序方式和自定义比较函数的作用,通过实例展示了如何使用比较函数实现数字和字符串的正确排序。


    JavaScript中的Array对象有自己的排序方法sort(),对数组中的数据项进行排序,但是有时候排序结果不尽如人意,比如

var arr = [12, 1, 2, 21, 3];
arr.sort();
alert(arr); 

    得到的结果为  1,12,2,21,3


    这是为什么呢?因为JavaScript中的排序默认按照ascii字符代码进行排序,也就是说,数字也是按照它们的字符串形式排序的。

var strArr = ['a', '2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());


    这个得到什么结果呢? 2,2a,3,a,a2,b


    因为 数字的ascii码比字母的小,所以数字排在前面,字母排在后面。


    如果想继续让上面的数组arr按照数字进行排序,怎么处理呢?

    JavaScript给我们提供了一个入口,可以给sort() 方法传递一个参数,即比较函数,来告诉排序算法值与值之间是大于、小于还是等于关系。


     比较函数是有着特定算法的函数。

function compare_fn(value1, value2) {
	if (value1 < value2) {
		return -1;
	} else if (value1 > value2) {
		return 1;
	} else {
		return 0;
	}
}


    将比较函数 compare_fn 传递给sort,再进行排序,然后输出

arr.sort(compare_fn);
alert(arr);

    得到 1, 2, 3, 12, 21


JavaScript中Array对象的sort方法返回值的定义为

负值 : 如果所传递的第一个参数比第二个参数小

零   : 两个值相等

正值 : 如果第一个参数比第二个参数大


    上面的比较函数还可以简写为

function compare_fn(value1, value2) {
	return value1 - value2;
}

    这个比较的为升序排列


    如果想降序排列,直接改变上面的返回值的符号就可以了,给所有返回均取反。

    对简写的比较函数就是

function compare_fn(value1, value2) {
	return -(value1 - value2);
}

    

    即

function compare_fn(value1, value2) {
	return value2 - value1;
}

   

    简单的记法就是:顺序升;逆序降





### PHP `sort` 函数的用法 在 PHP 中,`sort()` 是一个内置函数,用于对数组进行升序排序[^2]。该函数会修改原始数组,而不是创建一个新的排序后的数组。以下是 `sort()` 函数的一些关键点和示例: - **语法**:`bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )` - **参数**: - `$array`:需要排序数组。 - `$sort_flags`(可选):指定排序类型。常见的值包括: - `SORT_REGULAR`:按常规顺序排序(默认值)。 - `SORT_NUMERIC`:将元素作为数字处理。 - `SORT_STRING`:将元素作为字符串处理。 - `SORT_LOCALE_STRING`:根据当前区域设置按字符串排序。 - `SORT_NATURAL`:以自然排序算法排序。 - `SORT_FLAG_CASE`:与 `SORT_STRING` 或 `SORT_NATURAL` 结合使用,忽略大小写。 #### 示例代码 以下是一个简单的 `sort()` 函数使用示例: ```php <?php // 定义一个数组 $array = [3, 8, 1, 5, 9, 4]; // 使用 sort() 对数组进行升序排序 sort($array); // 输出排序后的数组 print_r($array); ?> ``` 运行上述代码后,输出结果为: ``` Array ( [0] => 1 [1] => 3 [2] => 4 [3] => 5 [4] => 8 [5] => 9 ) ``` 如果需要按照特定的排序规则,可以使用第二个参数 `$sort_flags`。例如,以下示例展示了如何按字符串方式进行排序: ```php <?php // 定义一个字符串数组 $array = ["apple", "banana", "cherry", "Apple"]; // 使用 sort() 按字符串排序,并忽略大小写 sort($array, SORT_STRING | SORT_FLAG_CASE); // 输出排序后的数组 print_r($array); ?> ``` 输出结果为: ``` Array ( [0] => Apple [1] => apple [2] => banana [3] => cherry ) ``` #### 注意事项 - `sort()` 函数会直接修改原数组,因此如果需要保留原始数组,可以在排序前复制一份副本。 - 如果数组中包含非标量值(如数组或对象),`sort()` 可能无法正常工作[^2]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值