Intl.NumberFormat.prototype.formatToParts()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2017.
Die formatToParts()
Methode von Intl.NumberFormat
Instanzen gibt ein Array von Objekten zurück, die jeden Teil des formatierten Strings darstellen, der von format()
zurückgegeben würde. Sie ist nützlich, um benutzerdefinierte Strings aus den lokalisierungsspezifischen Token zu erstellen.
Probieren Sie es aus
const amount = 654321.987;
const options = { style: "currency", currency: "USD" };
const numberFormat = new Intl.NumberFormat("en-US", options);
const parts = numberFormat.formatToParts(amount);
const partValues = parts.map((p) => p.value);
console.log(partValues);
// Expected output: "["$", "654", ",", "321", ".", "99"]"
Syntax
formatToParts(number)
Parameter
number
-
Eine
Number
, einBigInt
oder ein String, der formatiert werden soll. Strings werden auf die gleiche Weise geparst wie bei der Zahlenumwandlung, mit der Ausnahme, dassformatToParts()
den genauen Wert verwendet, den der String darstellt, um einen Präzisionsverlust bei der impliziten Umwandlung in eine Zahl zu vermeiden.
Rückgabewert
Ein Array
von Objekten, die die formatierte Zahl in Teilen enthalten. Jedes Objekt hat zwei Eigenschaften, type
und value
, die jeweils einen String enthalten. Die String-Konkatenation von value
, in der bereitgestellten Reihenfolge, ergibt den gleichen String wie format()
. Der type
kann einer der folgenden sein:
literal
-
Jeder String, der Teil des Formatmusters ist, zum Beispiel
" "
. Beachten Sie, dass häufig verwendete Token wie Dezimaltrennzeichen oder Plus-/Minuszeichen ihre eigenen Token-Typen haben. integer
-
Der ganzzahlige Teil der Zahl oder ein Segment davon, wenn Gruppierung verwendet wird (gesteuert durch
options.useGrouping
). group
-
Der Gruppentrennzeichen-String, wie
","
. Nur vorhanden bei Verwendung der Gruppierung (gesteuert durchoptions.useGrouping
). decimal
-
Das Dezimaltrennzeichen, wie
"."
. Nur vorhanden, wennfraction
vorhanden ist. fraction
-
Der bruchhafte Teil der Zahl.
compact
-
Der kompakte Exponent, wie
"M"
oder"tausend"
. Nur vorhanden, wennoptions.notation
"compact"
ist. Die Form ("short"
oder"long"
) kann überoptions.compactDisplay
gesteuert werden. exponentSeparator
-
Das Exponententrennzeichen, wie
"E"
. Nur vorhanden, wennoptions.notation
"scientific"
oder"engineering"
ist. exponentMinusSign
-
Der Exponenten-Minuszeichen-String, wie
"-"
. Nur vorhanden, wennoptions.notation
"scientific"
oder"engineering"
ist und der Exponent negativ ist. exponentInteger
-
Der ganzzahlige Wert des Exponenten. Nur vorhanden, wenn
options.notation
"scientific"
oder"engineering"
ist. nan
-
Ein String, der
NaN
darstellt, wie"NaN"
. Dies ist das einzige Token, das die Zahl selbst repräsentiert, wenn die ZahlNaN
ist. infinity
-
Ein String, der
Infinity
oder-Infinity
darstellt, wie"∞"
. Dies ist das einzige Token, das die Zahl selbst repräsentiert, wenn die ZahlInfinity
oder-Infinity
ist. plusSign
-
Das Pluszeichen, wie
"+"
. minusSign
-
Das Minuszeichen, wie
"-"
. percentSign
-
Das Prozentzeichen, wie
"%"
. Nur vorhanden, wennoptions.style
"percent"
ist. unit
-
Der Einheiten-String, wie
"l"
oder"Liter"
. Nur vorhanden, wennoptions.style
"unit"
ist. Die Form ("short"
,"narrow"
, oder"long"
) kann überoptions.unitDisplay
gesteuert werden. currency
-
Der Währungs-String, wie
"$"
,"€"
,"Dollar"
, oder"Euro"
. Nur vorhanden, wennoptions.style
"currency"
ist. Die Form ("code"
,"symbol"
,"narrowSymbol"
, oder"name"
) kann überoptions.currencyDisplay
gesteuert werden. unknown
-
Reserviert für jedes Token, das nicht als eines der oben genannten erkannt wird; sollte selten auftreten.
Beispiele
Verwendung von formatToParts()
Die format()
Methode gibt lokalisierte, undurchsichtige Strings aus, die nicht direkt manipuliert werden können:
const number = 3500;
const formatter = new Intl.NumberFormat("de-DE", {
style: "currency",
currency: "EUR",
});
formatter.format(number);
// "3.500,00 €"
In vielen Benutzeroberflächen möchten Sie jedoch möglicherweise das Format dieses Strings anpassen oder es mit anderen Texten verknüpfen. Die formatToParts()
Methode liefert die gleichen Informationen in Teilen:
formatter.formatToParts(number);
// return value:
[
{ type: "integer", value: "3" },
{ type: "group", value: "." },
{ type: "integer", value: "500" },
{ type: "decimal", value: "," },
{ type: "fraction", value: "00" },
{ type: "literal", value: " " },
{ type: "currency", value: "€" },
];
Nun sind die Informationen separat verfügbar und können angepasst und wieder zusammengefügt werden. Zum Beispiel durch die Verwendung von Array.prototype.map()
, Pfeilfunktionen, einer switch-Anweisung, Template-Strings und Array.prototype.join()
, um zusätzliche Markup für bestimmte Komponenten einzufügen.
const numberString = formatter
.formatToParts(number)
.map(({ type, value }) => {
switch (type) {
case "currency":
return `<strong>${value}</strong>`;
default:
return value;
}
})
.join("");
console.log(numberString);
// "3.500,00 <strong>€</strong>"
Spezifikationen
Specification |
---|
ECMAScript® 2025 Internationalization API Specification # sec-intl.numberformat.prototype.formattoparts |