Cara menggunakan 0++ pada JavaScript

Apa cara yang disarankan untuk mengisi ulang nilai dalam JavaScript? Saya membayangkan saya bisa membangun fungsi khusus untuk menempatkan nol pada nilai yang diketikkan, tetapi saya bertanya-tanya apakah ada cara yang lebih langsung untuk melakukan ini?

Catatan: Dengan "zerofilled" yang saya maksudkan dalam arti kata database [di mana representasi 6 digit dari angka 5 adalah "000005"].

Jawaban:

Catatan untuk pembaca!

Seperti yang telah ditunjukkan oleh para komentator, solusi ini "pintar", dan seperti yang sering dilakukan oleh solusi cerdas, intensif ingatan dan relatif lambat. Jika kinerja menjadi perhatian Anda, jangan gunakan solusi ini!

Berpotensi ketinggalan zaman : ECMAScript 2017 menyertakan String.prototype.padStart dan Number.prototype.toLocaleString ada sejak ECMAScript 3.1. Contoh:

var n=-0.1;
n.toLocaleString['en', {minimumIntegerDigits:4,minimumFractionDigits:2,useGrouping:false}]

... akan menampilkan "-0000.10".

// or 
const padded = [.1+""].padStart[6,"0"];
`-${padded}`

... akan menampilkan "-0000.1".

Yang Anda butuhkan hanyalah fungsi sederhana

function zeroFill[ number, width ]
{
  width -= number.toString[].length;
  if [ width > 0 ]
  {
    return new Array[ width + [/\./.test[ number ] ? 2 : 1] ].join[ '0' ] + number;
  }
  return number + ""; // always return a string
}

Anda bisa memanggang ini ke perpustakaan jika Anda ingin menghemat namespace atau apa pun. Seperti dengan ekstensi jQuery .

Cara sederhana. Anda bisa menambahkan perkalian string untuk pad dan mengubahnya menjadi fungsi.

var pad = "000000";
var n = '5';
var result = [pad+n].slice[-pad.length];

Sebagai suatu fungsi,

function paddy[num, padlen, padchar] {
    var pad_char = typeof padchar !== 'undefined' ? padchar : '0';
    var pad = new Array[1 + padlen].join[pad_char];
    return [pad + num].slice[-pad.length];
}
var fu = paddy[14, 5]; // 00014
var bar = paddy[2, 4, '#']; // ###2

Saya tidak percaya semua jawaban rumit di sini ... Gunakan saja ini:

var zerofilled = ['0000'+n].slice[-4];

Saya benar-benar harus datang dengan sesuatu seperti ini baru-baru ini. Saya pikir pasti ada cara untuk melakukannya tanpa menggunakan loop.

Inilah yang saya pikirkan.

function zeroPad[num, numZeros] {
    var n = Math.abs[num];
    var zeros = Math.max[0, numZeros - Math.floor[n].toString[].length ];
    var zeroString = Math.pow[10,zeros].toString[].substr[1];
    if[ num  zeroPad[50,4];
"0050"

Jika angkanya lebih besar dari padding, angkanya akan meluas melampaui padding:

> zeroPad[51234, 3];
"51234"

Desimal juga baik-baik saja!

> zeroPad[51.1234, 4];
"0051.1234"

Jika Anda tidak keberatan mencemari namespace global, Anda dapat menambahkannya ke Number secara langsung:

Number.prototype.leftZeroPad = function[numZeros] {
    var n = Math.abs[this];
    var zeros = Math.max[0, numZeros - Math.floor[n].toString[].length ];
    var zeroString = Math.pow[10,zeros].toString[].substr[1];
    if[ this 

Bài mới nhất

Chủ Đề