Nur für zukünftige Googler (oder nicht unbedingt "Googler"):
Alle oben genannten Lösungen sind wunderbar, RegExp ist jedoch in einer solchen Situation möglicherweise eine schrecklich schlechte Sache.
Also, ja, Sie könnten einige der vorgeschlagenen Optionen verwenden oder sogar etwas Primitives und Nützliches schreiben, wie:
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
Der hier verwendete reguläre Ausdruck ist ziemlich einfach und die Schleife wird genau so oft ausgeführt, bis die Aufgabe erledigt ist.
Und Sie könnten es viel besser optimieren, "DRYify" -Code und so weiter.
Noch,
(-1234567.0987).toLocaleString();
(in den meisten Situationen) wäre eine weitaus bessere Wahl.
Der Punkt liegt nicht in der Ausführungsgeschwindigkeit oder in der Cross-Browser-Kompatibilität.
In Situationen, in denen Sie dem Benutzer die resultierende Nummer anzeigen möchten, können Sie mit der Methode .toLocaleString () mit dem Benutzer Ihrer Website oder App (unabhängig von seiner Sprache) dieselbe Sprache sprechen.
Diese Methode gemäß der ECMAScript-Dokumentation wurde 1999 eingeführt, und ich glaube, der Grund dafür war die Hoffnung, dass das Internet irgendwann Menschen auf der ganzen Welt verbinden wird. Daher wurden einige "Internalisierungs" -Tools benötigt.
Heutzutage verbindet das Internet uns alle. Daher ist es wichtig, sich daran zu erinnern, dass die Welt viel komplexer ist, als wir es uns vorstellen können, und dass (/ fast) wir alle hier im Internet sind.
Angesichts der Vielfalt der Menschen ist es offensichtlich unmöglich, eine perfekte UX für alle zu garantieren, da wir verschiedene Sprachen sprechen, verschiedene Dinge schätzen usw. Und genau aus diesem Grund ist es noch wichtiger, zu versuchen, die Dinge so weit wie möglich zu lokalisieren .
Wenn man bedenkt, dass es einige spezielle Standards für die Darstellung von Datum, Uhrzeit, Zahlen usw. gibt und dass wir ein Tool haben, um diese Dinge in dem vom Endbenutzer bevorzugten Format anzuzeigen, ist dies nicht so selten und fast unverantwortlich, dies nicht zu tun Verwenden Sie dieses Tool (insbesondere in Situationen, in denen wir diese Daten dem Benutzer anzeigen möchten)?
Für mich klingt die Verwendung von RegExp anstelle von .toLocaleString () in einer solchen Situation ein bisschen so, als würde man eine Uhr-App mit JavaScript erstellen und so hart codieren, dass nur die Prager Zeit angezeigt wird (was für ziemlich nutzlos wäre Menschen, die nicht in Prag leben), obwohl das Standardverhalten von
new Date();
ist es, die Daten gemäß der Uhr des Endbenutzers zurückzugeben.