| new formatter each time | const locale = "DE-de"
numbers.forEach((value) => {
const formatterOptions = {
style: "decimal",
minimumFractionDigits: 0,
maximumFractionDigits: 2,
useGrouping: false,
signDisplay: "exceptZero"
}
const formatter = new Intl.NumberFormat(locale, formatterOptions)
formatter.format(value)
})
| ready |
| cached formatter by json string | const locale = "DE-de"
const formatterMap = new Map()
function getFormatter(locale, options) {
const stringOptions = JSON.stringify(options)
const formatter = formatterMap.get(stringOptions) ?? new Intl.NumberFormat(locale, options)
formatterMap.set(stringOptions, formatter)
return formatter
}
numbers.forEach((value) => {
const formatterOptions = {
style: "decimal",
minimumFractionDigits: 0,
maximumFractionDigits: 2,
useGrouping: false,
signDisplay: "exceptZero"
}
const formatter = getFormatter(locale, formatterOptions)
formatter.format(value)
})
| ready |
| cached formatter by args list | const locale = "DE-de"
let lastArgs = []
let lastFormatter
function getFormatter(locale, options) {
const args = [options.style, options.minimumFractionDigits, options.maximumFractionDigits, options.useGrouping, options.signDisplay]
const useCached = lastArgs.every((arg, index) => arg === args[index])
const formatter = useCached && lastFormatter ? lastFormatter : new Intl.NumberFormat(locale, options)
lastFormatter = formatter
lastArgs = args
return formatter
}
numbers.forEach((value) => {
const formatterOptions = {
style: "decimal",
minimumFractionDigits: 0,
maximumFractionDigits: 2,
useGrouping: false,
signDisplay: "exceptZero"
}
const formatter = getFormatter(locale, formatterOptions)
formatter.format(value)
})
| ready |