Beim Schreiben eines numerischen Basiskonverters ist mir ein absurder Einzeiler eingefallen. In den anderen Antworten habe ich nichts Vergleichbares gefunden, also los geht's:
// This is cursed
function p(i,w,z){z=z||0;w=w||8;i+='';var o=i.length%w;return o?[...Array(w-o).fill(z),...i].join(''):i;}
console.log(p(8675309)); // Default: pad w/ 0 to 8 digits
console.log(p(525600, 10)); // Pad to 10 digits
console.log(p(69420, 10, 'X')); // Pad w/ X to 10 digits
console.log(p(8675309, 4)); // Pad to next 4 digits
console.log(p(12345678)); // Don't pad if you ain't gotta pad
Oder in einer Form, die nicht ganz so leicht verrät, dass ich meine Seele an die Black Perl verkauft habe:
function pad(input, width, zero) {
zero = zero || 0; width = width || 8; // Defaults
input += ''; // Convert input to string first
var overflow = input.length % width // Do we overflow?
if (overflow) { // Yep! Let's pad it...
var needed = width - overflow; // ...to the next boundary...
var zeroes = Array(needed); // ...with an array...
zeroes = zeroes.fill(zero); // ...full of our zero character...
var output = [...zeroes,...input]; // ...and concat those zeroes to input...
output = output.join(''); // ...and finally stringify.
} else {
var output = input; // We don't overflow; no action needed :)
}
return output; // Done!
}
Eine Sache, die diese Antwort von den anderen unterscheidet, ist, dass sie eine modulo der Länge der Zahl auf die Zielbreite statt einer einfachen Größer-als-Prüfung. Dies ist praktisch, wenn Sie sicherstellen wollen, dass die resultierende Länge ein Vielfaches der Zielbreite ist (z. B. wenn die Ausgabe entweder 5 oder 10 Zeichen lang sein soll).
Keine Ahnung, wie gut es funktioniert, aber immerhin ist es schon minifiziert!