JS数组排序sort自定义函数不生效

本文讲述了作者在刷LeetCode时遇到的数组排序问题,起初尝试使用自定义sort函数失败,后通过对比官方题解和MDN文档发现sort方法中compareFn应返回数值而非布尔值,从而解决了问题并引发对编程习惯的反思。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

        刷LeetCode时,遇到一道简单的数组排序题:

问题

        想着直接用js的数组sort自定义排序即可,奈何测试用例运行总是不通过,返回的一直都是原数组。

代码排查

        复制代码到Firefox浏览器控制台运行,结果输出的是正确结果:[1, 2, 3, 4, 5]

var sortBy = function (arr, fn) {
   return arr.sort((a, b) => fn(a) > fn(b))
};

console.log(sortBy([5,4,1,2,3], (x)=>x)) // [1,2,3,4,5]

转换解题思路

        估摸想着是不是题目不给用sort,想考考排序算法?接着写了一个冒泡排序,测试用例完美通过,一提交计算超时。。。

        无奈下看了官方题解

// 官方题解
var sortBy = function(arr, fn) {
    return arr.sort((a,b) => fn(a) - fn(b))
};

        发现排序自定义方法跟我的有些不同,我使用的是比较大小:fn(a) > fn(b),而官方则是用减法fn(a) - fn(b)。

原因

        特意去MDN查询一番,发现compareFn应该返回数值,而不是Boolean值。新版的浏览器可能做了兼容。Array.prototype.sort() - JavaScript | MDN

结语    

         回想到曾经做过的项目,似乎也遇到过类似的场景,过去那么久了,本人还在这个坑上。。。

        因此克服懒惰,写下这篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值