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-'

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á!