de artismarti

Cum se inversează un număr în JavaScript

Exemple care utilizează o funcție săgeată și o funcție regulată JS

0*9bS6yWpHz8 tuY52
Fotografie de chuttersnap pe Unsplash

Inversarea unui șir sau inversarea unui număr este una dintre întrebările obișnuite adresate la programarea interviurilor. Să aruncăm o privire la modul în care se face acest lucru.

Reguli / Limitări:

  • Numerele negative ar trebui să rămână negative.

ex. -12345devine -54321

  • Orice zero inițial ar trebui eliminat.

ex. 321000 devine 123 & nu 000123

  • Funcția poate accepta flotante sau numere întregi.

ex. 543.2100 devine 12.345

  • Funcția va returna numerele întregi ca numere întregi.

ex. 54321 devine 12345 & nu 12345.00

Rezolvarea cu o funcție săgeată:

const reversedNum = num => parseFloat(num.toString().split('').reverse().join('')) * Math.sign(num)

Rezolvarea cu o funcție regulată:

function reversedNum(num) {
  return (
    parseFloat(
      num
        .toString()
        .split('')
        .reverse()
        .join('')
    ) * Math.sign(num)
  )                 
}

Diferența dintre o funcție săgeată și o funcție regulată:

În acest exemplu, singura diferență între funcția săgeată și funcția regulată este că funcția regulată trebuie să furnizeze un explicit return valoare.

Funcțiile săgeată au un implicit return valoare – dacă pot fi scrise într-un singur rând, fără a fi nevoie de{} bretele.

Să descompunem pașii:

  • Convertiți numărul într-un șir

num.toString() convertește numărul dat într-un șir. Facem acest lucru pentru a putea folosi split funcționează pe el în continuare.

let num = -5432100
num.toString()

// num = '-5432100'
  • Împarte șirul într-o matrice

num.split('') convertește șirul într-o matrice de personaje. Facem acest lucru, astfel încât să putem utiliza funcția de inversare a matricei (care nu funcționează pe un șir).

// num = '-5432100'

num.split('')

// num = [ '-', '5', '4', '3', '2', '1', '0', '0' ]
  • Inversați matricea

num.reverse() inversează ordinea articolelor din matrice.

// num = [ '-', '5', '4', '3', '2', '1', '0', '0' ]

num.reverse()

// num = [ '0', '0', '1', '2', '3', '4', '5', '-' ]
  • Alăturați-l din nou într-un șir

num.join('') reasambla caracterele inversate într-un șir.

// num = [ '0', '0', '1', '2', '3', '4', '5', '-' ]

num.join('')

// num = '0012345-'
  • Analiza valoarea de intrare într-un număr în virgulă mobilă:

parseFloat(num) converti num într-un plutitor dintr-un șir.

// num = '0012345-'

parseFloat(num)

// num = 12345

Notă: parseFloat alearga pana la urma (chiar dacă este pe prima linie a funcției) pe numărul inversat și elimină orice zero de pornire.

  • Înmulțiți-l cu semn a numărului original – pentru a menține valoarea negativă.

num * Math.sign(num) înmulțește numărul cu semnul numărului original furnizat.

// original value of num = -5432100
// num = 12345

num * Math.sign(-5432100)

// num = -12345

Și, iată-l!