JavaScript中sort排序遇到的坑
程序员文章站
2024-01-26 12:44:34
...
在刷第一次尝试刷leetcode 正好每日一题是零钱兑换。题干如下:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。例如输入: coins = [1, 2, 5], amount = 11 输出: 3
解释: 11 = 5 + 5 + 1
做的时候用到了sort()方法对coins数组进行排序,使用时忘记了写参数,于是出了bug:测试用例coins = [1, 2, 5, 8, 10]; 用sort()方法排序之后输出的是[1, 10, 2, 5, 8],查了mdn才发现如果缺省参数中的比较函数,则是将其中元素转换为字符串按诸个字符的Unicode位点进行排序。
如果想要将数组按大小进行排序的话,要加上比较函数compare(a, b)作为参数,数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:
如果 compare(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
如果 compare(a, b) 等于 0 , a 和 b 的相对位置不变。
如果 compare(a, b) 大于 0 , b 会被排列到 a 之前。
以下是MDN给出的实例:
function compare(a, b) {
if (a < b ) { // 按某种排序标准进行比较, a 小于 b
return -1;
}
if (a > b ) {
return 1;
}
// a must be equal to b
return 0;
}
如果只是想对数组中的数字进行升序排序的话 可以写成
function compareNumbers(a, b) {
return a - b; // 如果想要实现降序则改为b - a
}
在控制台中输出了一下几种写法的结果如下
上一篇: SpringBoot整合Mybatis
推荐阅读
-
JavaScript中sort排序遇到的坑
-
python中移除列表元素所遇到的坑
-
javascript开发之百度地图使用中遇到的js函数整理
-
JavaScript中关于正则我踩过的那些坑!!!
-
实例分析nodejs模块xml2js解析xml过程中遇到的坑
-
js对数组中的数字从小到大排序实现代码_javascript技巧
-
为什么 Python 中列表的 sort 方法一定要返回 None 而不是排序后的列表?
-
php-redis中的sort排序函数总结
-
在java中对LIst集合的两种排序方法(即sort的使用方法)
-
集合中按照商品价格排序,按照学生编号排序,Collections集合里的sort方法,Comparator
接口,Comparable 接口,