de artismarti
Cum se inversează un număr în JavaScript
Exemple care utilizează o funcție săgeată și o funcție regulată JS
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. -12345
devine -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!