You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:27:00