Tylko dla przyszłych Googlersów (lub niekoniecznie „Googlersów”):
Wszystkie powyższe rozwiązania są wspaniałe, jednak RegExp może być okropnie złą rzeczą w takiej sytuacji.
Tak, możesz użyć niektórych z proponowanych opcji lub nawet napisać coś prymitywnego, ale przydatnego, takiego jak:
const strToNum = str => {
//Find 1-3 digits followed by exactly 3 digits & a comma or end of string
let regx = /(\d{1,3})(\d{3}(?:,|$))/;
let currStr;
do {
currStr = (currStr || str.split(`.`)[0])
.replace( regx, `$1,$2`)
} while (currStr.match(regx)) //Stop when there's no match & null's returned
return ( str.split(`.`)[1] ) ?
currStr.concat(`.`, str.split(`.`)[1]) :
currStr;
};
strToNum(`123`) // => 123
strToNum(`123456`) // => 123,456
strToNum(`-1234567.0987`) // => -1,234,567.0987
Wyrażenie regularne, które tu zastosowano, jest dość proste, a pętla przejdzie dokładnie tyle razy, ile potrzeba, aby wykonać zadanie.
Możesz go zoptymalizować znacznie lepiej, kodować „DRYify” i tak dalej.
Jeszcze,
(-1234567.0987).toLocaleString();
(w większości sytuacji) byłby zdecydowanie lepszym wyborem.
Nie chodzi o szybkość wykonywania ani kompatybilność z różnymi przeglądarkami.
W sytuacjach, gdy chcesz pokazać wynikowy numer użytkownikowi, metoda .toLocaleString () daje ci superumiejętność mówienia tym samym językiem z użytkownikiem witryny lub aplikacji (niezależnie od tego, jaki jest jego język).
Ta metoda zgodnie z dokumentacją ECMAScript została wprowadzona w 1999 r. I uważam, że powodem tego była nadzieja, że Internet w pewnym momencie połączy ludzi na całym świecie, dlatego potrzebne były pewne narzędzia „internalizacji”.
Dzisiaj Internet łączy nas wszystkich, dlatego ważne jest, aby pamiętać, że świat jest znacznie bardziej złożony, niż moglibyśmy to sobie wyobrazić, i że (/ prawie) wszyscy jesteśmy tutaj , w Internecie.
Oczywiście, biorąc pod uwagę różnorodność ludzi, nie jest możliwe zagwarantowanie każdemu idealnego UX, ponieważ mówimy różnymi językami, cenimy różne rzeczy itp. I właśnie z tego powodu jeszcze ważniejsze jest, aby spróbować zlokalizować rzeczy tak bardzo, jak to możliwe .
Biorąc pod uwagę, że istnieją pewne szczególne standardy reprezentacji daty, godziny, liczb itp. I że mamy narzędzie do wyświetlania tych rzeczy w formacie preferowanym przez użytkownika końcowego, nie jest to rzadkie i prawie nieodpowiedzialne, aby nie skorzystać z tego narzędzia (szczególnie w sytuacjach, gdy chcemy wyświetlić te dane użytkownikowi)?
Dla mnie używanie RegExp zamiast .toLocaleString () w takiej sytuacji brzmi trochę jak tworzenie aplikacji zegara z JavaScript i kodowanie go w taki sposób, aby wyświetlał tylko czas w Pradze (co byłoby całkiem bezużyteczne dla ludzie, którzy nie mieszkają w Pradze), mimo że zachowanie domyślne
new Date();
jest zwracanie danych zgodnie z zegarem użytkownika końcowego.