Artigo original: How to reverse a number in JavaScript
Escrito por: artismarti
Exemplos usando uma arrow function e uma função regular do JS
Inverter uma string ou um número é uma das perguntas mais comuns fitas em entrevistas de programação. Vamos ver agora como fazer isso.
Regras/limitações:
- Os números negativos devem permanecer negativos.
Ex.: -12345
passa a ser -54321
- Zeros que venham antes do número devem ser removidos.
Ex.: 321000
passa a ser 123
, não 000123
- A função pode aceitar números de ponto flutuante ou inteiros.
Ex.: 543.2100
passa a ser 12.345
- A função retornará números inteiros como números inteiros.
Ex.: 54321
passa a ser 12345
, não 12345.00
Resolvendo o problema com uma arrow function:
const reversedNum = num => parseFloat(num.toString().split('').reverse().join('')) * Math.sign(num)
Resolvendo o problema com uma função regular:
function reversedNum(num) {
return (
parseFloat(
num
.toString()
.split('')
.reverse()
.join('')
) * Math.sign(num)
)
}
Diferenças entre a arrow function e a função regular:
Neste exemplo, a única diferença entre a arrow function e a função regular é que a última precisa fornecer um valor de return
explícito.
As arrow functions têm um valor de return
implícito — se puderem ser escritas em uma linha, sem a necessidade das chaves {}
.
Vamos agora analisar passo a passo:
- Converter o número em uma string
num.toString()
converte o número fornecido em uma string. Fazemos isso para poder usar a função split
posteriormente.
let num = -5432100
num.toString()
// num = '-5432100'
- Dividir a string em um array
num.split('')
converte a string em um array de caracteres. Fazemos isso para podermos usar a função reverse dos arrays (que não funciona em uma string).
// num = '-5432100'
num.split('')
// num = [ '-', '5', '4', '3', '2', '1', '0', '0' ]
- Inverter o array
num.reverse()
inverte a ordem dos itens do array.
// num = [ '-', '5', '4', '3', '2', '1', '0', '0' ]
num.reverse()
// num = [ '0', '0', '1', '2', '3', '4', '5', '-' ]
- Unir o array novamente, transformando-o em string
num.join('')
reúne os caracteres invertidos da string.
// num = [ '0', '0', '1', '2', '3', '4', '5', '-' ]
num.join('')
// num = '0012345-'
- Fazer o parsing do valor de entrada em um número de ponto flutuante:
parseFloat(num)
converte num
em um número de ponto flutuante a partir da string.
// num = '0012345-'
parseFloat(num)
// num = 12345
Observação: parseFloat
é executado no final (embora esteja na primeira linha da função) no número invertido e remove os zeros à esquerda.
- Multiplicar o número pelo sinal do número original — para manter o valor negativo.
num * Math.sign(num)
multiplica o número pelo sinal do número original fornecido.
// original value of num = -5432100
// num = 12345
num * Math.sign(-5432100)
// num = -12345
E aí está!