如何在JavaScript中翻转一个负数?

3
我正在尝试以这种方式获取输出,但不幸的是,它没有返回预期的值...

function reverseInt(int){
    let intRev ="";
    for(let i= 0; i<int.length; i++){
        intRev = int[i]+intRev ;
    }
    return intRev ;
}
console.log(reverseInt("-12345"));


2
期望值应该是多少? - Blue
它应该返回-54321 - phmollah
可能是如何在JavaScript中原地反转字符串?的重复问题。 - Suresh Kamrushi
不,它与你提到的那个不同。 - phmollah
12个回答

14

使用

function reverseInt(n) {
    return Math.sign(n)*parseInt(n.toString().split('').reverse().join(''));
}

@JasminMistry 请不要在其他有效答案存在的情况下要求绿色勾号。顺便问一句,是你给我的答案投了反对票吗? - Tim Biegeleisen

5

您的基本逻辑是正确的,但您需要处理正整数和负整数输入之间的差异。 对于后者,您希望从第二个字符开始构建反向字符串。 此外,在返回翻转的负数字符串时,您还需要在前面添加负号。

function reverseInt(int){
    let intRev = "";
    let start = int < 0 ? 1 : 0;
    for (let i=start; i<int.length; i++) {
        intRev = int[i] + intRev;
    }
    return int < 0 ? '-' + intRev : intRev;
}

console.log("12345 in reverse is:  " + reverseInt("12345"));
console.log("-12345 in reverse is: " + reverseInt("-12345"));

编辑:一些回答使用基本的字符串反转函数。但是,这个答案尝试解决你确切原始方法的问题。


2
希望它能返回您预期的输出。

function reverseInt(int){
    const intRev = int.toString().split('').reverse().join('');
    return parseInt(intRev) * Math.sign(int);
}
alert(reverseInt("-12345"));


1

const n = -315;
console.log(Math.sign(n) * Number(Math.abs(n).toString().split("").reverse().join(""))) ;

这里我使用了Math.sign,它返回数字[-1,1] ; W的符号,而Math.abs则返回没有符号的值。 要将数字反转为字符串,再转为数组,然后反转,再转为字符串,最后转为数字。

1
如果您想使用纯数学解决方案,那么应该是这样的:
从数字中去掉最后一位,并将其附加到反转的数字变量的末尾,直到原始数字消失并且反转的数字完整为止。
代码:
var reverse = function(x) {
    let reverse = 0;
    let sign = Math.sign(x);
    if (sign === -1) {
        x = x*sign;
    }
    while (x > 0) {
        reverse = (reverse * 10) + (x%10);
        x = parseInt(x/10, 10);
    }
    return reverse * sign;
};

我正在寻找一个涵盖负数而不将它们转换为字符串的答案。这个答案帮了我很大的忙。谢谢 :) - blossom-babs

0

跳过减号,最后加上它,得到类似于-54321的结果。

示例:

function reverseInt(int){
    let intRev ="";
    for(let i= 1; i<int.length; i++){
        intRev = int[i]+intRev ;
    }
    intRev ='-'+intRev;
    return intRev ;
}
console.log(reverseInt("-12345"));

0
对于负数/非负整数(不包括字符串),这个方法是有效的。
const reverseInteger = (int) => {
    let reversed = '';
    let sign = int < 0 ? 1 : 0;
    let convertIntToString = int.toString();
    for (let i = sign; i < convertIntToString.length; i++) {
        reversed = parseInt(convertIntToString[i] + reversed);
        //parseInt to convert to integer, doing this to mostly remove 
        //leading zeros
    }
    return int < 0 ? "-" + reversed : reversed;
};

console.log(reverseInteger(789));
console.log(reverseInteger(-51989000));

0
这是正整数和负整数的解决方案。
function reverseInteger(num){
  let isNegative = false;
  let integerString = String(num)

  if (Math.sign(num) === -1) {
    isNegative = true;
    integerString = integerString.replaceAll("-", "");
  }

  const reversedStringArray = String(integerString).split("").reverse("");
  const result = reversedStringArray.toString().replaceAll(",", "");

  return isNegative ? Number(`-${result}`) : Number(result);
}

0

这可能有些过度,但以下是我如何反转一个整数的方法。

Convert the arguments to a string, use the string reverse func and join the array. To check if the argument is positive or negative we check what is returned from Math.sign(). There are some shortcuts to convert the reverse item back to a int. This could be expanded to check if the int is 0 for example, it is not bullet proof. .

function reverse(int){
  let r = (Math.sign(int) > 0) ? +[...Array.from(int.toString()).reverse()].join('') : -Math.abs([...Array.from(int.toString()).reverse()].join('').replace('-',''));
  return r
}
console.log(reverse(-123))


0

function reverseInt(n) {
    const isNegativeNumber = Boolean(n < 0)
    const reversedStringifiedNumber = n.toString().split('').reverse().join('')
    
    return parseInt(`${isNegativeNumber ? '-' : ''}${reversedStringifiedNumber}`)
}

console.log(reverseInt(1234))
console.log(reverseInt(-1234))
console.log(reverseInt(0))
console.log(reverseInt(-0))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接