欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
}

在控制台中输出了一下几种写法的结果如下
JavaScript中sort排序遇到的坑

相关标签: javascript