@thi.ng/strings
Version:
Various string formatting & utility functions
117 lines (116 loc) • 1.84 kB
JavaScript
import { memoizeJ } from "@thi.ng/memoize/memoizej";
const units = memoizeJ(
(exp, base, prec = 2) => {
const groups = exp.map(
(x) => [
x[0],
x[2] != null ? x[2] : prec,
x[1]
]
).sort((a, b) => a[0] - b[0]);
return (x) => {
if (x === 0) {
return `0${base}`;
}
const absX = Math.abs(x);
for (let i = groups.length; i-- > 0; ) {
const g = groups[i];
if (absX >= g[0] || i === 0) {
return (x / g[0]).toFixed(g[1]) + g[2];
}
}
return "";
};
}
);
const KB = 1024;
const bits = units(
[
[],
[],
[],
[]
],
" bits",
2
);
const bytes = units(
[
[],
[],
[],
[],
[],
[]
],
" bytes",
2
);
const seconds = units(
[
[],
[],
[],
[],
[],
[],
[],
[]
],
" secs",
3
);
const meters = units(
[
[],
[],
[],
[],
[],
[],
[]
],
" m",
2
);
const grams = units(
[
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
" g",
2
);
const unitless = units(
[
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
"",
0
);
export {
bits,
bytes,
grams,
meters,
seconds,
unitless,
units
};