Sau một thời gian dài, rất lâu để thử nghiệm 15 chức năng / phương pháp khác nhau được tìm thấy trong câu hỏi này, giờ đây tôi biết cái nào là tốt nhất (linh hoạt nhất và nhanh nhất).
Tôi đã lấy 15 hàm / phương thức từ các câu trả lời cho câu hỏi này và tạo một kịch bản để đo thời gian thực hiện 100 miếng đệm. Mỗi pad sẽ đệm số 9
với2000
số không. Điều này có vẻ quá mức, và nó là, nhưng nó cung cấp cho bạn một ý tưởng tốt về quy mô của các chức năng.
Mã tôi đã sử dụng có thể được tìm thấy ở đây:
https://gist.github.com/NextToNoth/6325915
Hãy tự sửa đổi và kiểm tra mã.
Để có được phương pháp linh hoạt nhất, bạn phải sử dụng một vòng lặp. Điều này là do với số lượng rất lớn những người khác có khả năng thất bại, trong khi đó, điều này sẽ thành công.
Vậy, sử dụng vòng lặp nào? Vâng, đó sẽ là một while
vòng lặp. Một for
vòng lặp vẫn nhanh, nhưng một while
vòng lặp chỉ nhanh hơn một chút (vài ms) - và sạch hơn.
Câu trả lời như những người bằng Wilco
, Aleksandar Toplek
hoặc Vitim.us
sẽ làm công việc hoàn hảo.
Cá nhân, tôi đã thử một cách tiếp cận khác. Tôi đã cố gắng sử dụng một hàm đệ quy để đệm chuỗi / số. Nó hoạt động tốt hơn các phương thức tham gia vào một mảng nhưng, vẫn không hoạt động nhanh như vòng lặp for.
Chức năng của tôi là:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Bạn có thể sử dụng chức năng của tôi có hoặc không có cài đặt biến đệm. Vì vậy, như thế này:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Cá nhân, sau khi thử nghiệm, tôi sẽ sử dụng một phương thức với vòng lặp while, như Aleksandar Toplek
hoặcVitim.us
. Tuy nhiên, tôi sẽ sửa đổi nó một chút để bạn có thể đặt chuỗi đệm.
Vì vậy, tôi sẽ sử dụng mã này:
function padLeft(str, len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
str = str + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
padLeft(1, 3); // Returns '001'
// - Or -
padLeft(1, 3, "x"); // Returns 'xx1'
Bạn cũng có thể sử dụng nó như một chức năng nguyên mẫu, bằng cách sử dụng mã này:
Number.prototype.padLeft = function(len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
var str = this + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
var num = 1;
num.padLeft(3); // Returns '001'
// - Or -
num.padLeft(3, "x"); // Returns 'xx1'