数组未基于重写的compareTo方法排序,求助排查原因
数组按x值从大到小排序失效?快排查这几个坑!
兄弟别抓狂!我懂这种明明觉得逻辑没问题,但数组完全没按预期排序的崩溃感😤 针对(x,y)对数组按x从大到小排序失效的问题,大概率是比较函数的写法出了问题,我给你捋几个最常见的踩坑点:
直接用默认的sort()方法:很多人会忽略,JavaScript的
sort()默认是把元素转成字符串按Unicode码排序,不是数值排序!比如你的x是10和2,默认排序会把"10"排在"2"前面,完全不符合数值从大到小的需求。比较函数的返回值搞反了:要实现从大到小排序,得让大的x优先排在前面。正确的比较逻辑应该是
(a, b) => b.x - a.x——如果写成a.x - b.x,那结果就是从小到大排序了,搞反了当然看不到你要的效果。x值的类型不对:如果你的x是字符串形式的数字(比如
"5"、"12"),虽然JS会隐式转换,但偶尔会出现意外情况。保险起见,最好先把x转成数值再比较,比如(a, b) => Number(b.x) - Number(a.x)。
举个正确的示例代码给你参考:
// 原始数组 const pointArray = [{x: 2, y: 10}, {x: 5, y: 3}, {x: 1, y: 7}]; // 按x从大到小排序 pointArray.sort((a, b) => b.x - a.x); // 排序后结果:[{x:5,y:3}, {x:2,y:10}, {x:1,y:7}]
如果排查完这些还是没解决问题,把你的代码片段贴出来,我帮你揪出具体的问题点!
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

