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

NodeJS中如何反转数字/字符串?我的反转代码为何失效?

我来帮你拆解下问题哈~

你的代码问题分析

首先看你写的代码里有两个关键问题:

  1. 拼写错误:Unit16Array应该是Uint16Array(注意是Uint而非Unit,是unsigned int的缩写),这个拼写错误会直接导致代码报错,因为JS环境中不存在Unit16Array这个构造函数。
  2. Buffer创建方式过时:new Buffer()在Node.js新版本中已经被废弃,官方推荐使用Buffer.from()来创建Buffer实例,避免潜在的安全风险。

修正后的可运行代码大概是这样:

function reverseWithBuffer(inputStr) {
  const buffer = Buffer.from(inputStr, "ucs2");
  const uint16Arr = new Uint16Array(buffer);
  uint16Arr.reverse(); // TypedArray自身就有reverse方法,无需借助Array的reverse
  return buffer.toString("ucs2");
}

// 测试:输入"1234"会返回"4321"
console.log(reverseWithBuffer("1234"));
这种方法是否可行?

其实是可行的,但有点“大材小用”。因为你要处理的是数字/字符串反转,而UCS-2编码下普通数字字符(0-9)每个占2字节,Uint16Array会把每个字符对应成一个16位无符号整数,反转这个数组后再转回去,确实能实现字符串反转效果。但这种方法只适合字符串形式的输入,如果你传入的是纯数字(比如123而非"123"),还需要先转成字符串才行。

如果只是处理普通数字反转,用Buffer的方式显得冗余,不如直接操作字符串或用数字运算更高效。

不使用Buffer的反转方法

这里给你两种常用的思路:

1. 字符串操作法(简单直观)

把数字转成字符串,拆分成字符数组后反转,再拼接回去,还能处理负数的情况:

function reverseNumber(num) {
  // 处理负数:先记录符号,反转绝对值部分后再补符号
  const isNegative = num < 0;
  const reversedStr = Math.abs(num).toString().split('').reverse().join('');
  // 转回数字,自动处理末尾是0的情况(比如100反转后是001,转成数字就是1)
  return isNegative ? -Number(reversedStr) : Number(reversedStr);
}

// 测试用例
console.log(reverseNumber(123)); // 321
console.log(reverseNumber(-456)); // -654
console.log(reverseNumber(100)); // 1

2. 数字运算法(纯数值操作,不转字符串)

通过取余和整除逐位反转数字,适合不想依赖字符串操作的场景:

function reverseNumber(num) {
  let isNegative = num < 0;
  let numAbs = Math.abs(num);
  let reversedNum = 0;

  while (numAbs > 0) {
    // 取最后一位数字,加到反转结果的末尾
    reversedNum = reversedNum * 10 + numAbs % 10;
    // 去掉最后一位数字
    numAbs = Math.floor(numAbs / 10);
  }

  return isNegative ? -reversedNum : reversedNum;
}

// 测试用例
console.log(reverseNumber(789)); // 987
console.log(reverseNumber(-102)); // -201

内容的提问来源于stack exchange,提问作者vsvk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:17:07