NodeJS中如何反转数字/字符串?我的反转代码为何失效?
我来帮你拆解下问题哈~
你的代码问题分析
首先看你写的代码里有两个关键问题:
- 拼写错误:
Unit16Array应该是Uint16Array(注意是Uint而非Unit,是unsigned int的缩写),这个拼写错误会直接导致代码报错,因为JS环境中不存在Unit16Array这个构造函数。 - 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
相关产品推荐
相关产品推荐

