JavaScript按双属性排序高尔夫分组问题求助
高尔夫分组排序问题解决方案
问题根源
你当前的排序逻辑存在逻辑错误:使用&&同时判断position和letter都更大才返回1,这会导致大量排序场景判断失效。比如当a.position大于b.position但a.letter更小时,会错误地返回-1,导致顺序颠倒。
正确实现代码
要实现1A、1B、2A、2B的排序逻辑,需要先按position数字升序,position相同时再按letter字母升序,代码如下:
groups = groups.sort((a, b) => { // 优先比较position数字 if (a.position !== b.position) { return a.position - b.position; } // position相同时,比较字母顺序 return a.letter.localeCompare(b.letter); });
代码说明
- 数字比较:
a.position - b.position直接利用数字差值实现升序,差值为正则a排后,负则排前。 - 字母比较:
localeCompare()方法会根据字母的自然顺序返回对应结果,完美适配A→B→C的排序需求。
原代码错误示例
比如比较2A和1B时:
a.position(2) > b.position(1)为true,但a.letter(A) > b.letter(B)为false,&&条件不成立,返回-1,导致2A被错误排在1B前面。
内容的提问来源于stack exchange,提问作者thetechguy61705
相关产品推荐
相关产品推荐

