如何在JavaScript中实现按末位优先规则对整数数组排序
问题代码错误分析
- 最长长度计算逻辑错误:使用
Math.max()比较两个反转后字符串,会自动转数值进行比较,无法得到长度更长的字符串;后续.toString未加调用括号(),实际拿到的是函数对象,取length得到的是函数形参个数,完全不符合预期。 - 长度差异场景未处理:两个反转后字符串长度不同时,短字符串遍历完后的缺位没有默认比较逻辑,导致长度不同的项排序错误,比如100和10的顺序颠倒。
- 比较函数无相等返回值:所有位都相等时未返回0,不符合Array.sort的比较函数规范,可能导致排序不稳定。
修复后代码
/** 输入仅为正整数 */ const input = [1, 10, 20, 33, 13, 60, 92, 100, 21]; const reverseString = (string) => { return string.split("").reverse().join(""); }; // 拷贝原数组避免原地修改 const sortedInput = [...input].sort((firstNumber, secondNumber) => { const firstReversed = reverseString(firstNumber.toString()); const secondReversed = reverseString(secondNumber.toString()); // 取两个反转字符串的最大长度 const maxLen = Math.max(firstReversed.length, secondReversed.length); for (let i = 0; i < maxLen; i++) { // 缺位默认补0 const firstBit = firstReversed[i] ?? '0'; const secondBit = secondReversed[i] ?? '0'; if (firstBit !== secondBit) { return firstBit > secondBit ? 1 : -1; } } // 所有位相等返回0 return 0; }); console.log(sortedInput); // 输出 [100, 10, 20, 60, 1, 21, 92, 13, 33] 符合预期
内容的提问来源于stack exchange,提问作者sankiago
相关产品推荐
相关产品推荐

