หลังจากใช้เวลานานนานในการทดสอบ 15 ฟังก์ชั่น / วิธีการที่แตกต่างกันซึ่งพบในคำถามนี้ฉันตอบได้ว่าตอนนี้ฉันรู้แล้วว่าตัวไหนดีที่สุด (หลากหลายที่สุดและเร็วที่สุด)
ฉันใช้เวลา 15 หน้าที่ / วิธีจากคำตอบสำหรับคำถามนี้และสร้างสคริปต์เพื่อวัดเวลาที่ใช้ในการประมวลผล 100 แผ่น แต่ละแผ่นจะรองหมายเลข9
ด้วย2000
ศูนย์ สิ่งนี้อาจดูมากเกินไป แต่มันก็เป็นความคิดที่ดีเกี่ยวกับการปรับขนาดของฟังก์ชั่น
รหัสที่ฉันใช้สามารถพบได้ที่นี่:
https://gist.github.com/NextToNothing/6325915
อย่าลังเลที่จะแก้ไขและทดสอบโค้ดด้วยตัวเอง
เพื่อให้ได้วิธีที่หลากหลายที่สุดคุณต้องใช้การวนซ้ำ นี่เป็นเพราะมีจำนวนมากที่คนอื่น ๆ มีแนวโน้มที่จะล้มเหลวในขณะที่สิ่งนี้จะประสบความสำเร็จ
แล้ววงไหนที่จะใช้? นั่นจะเป็นการwhile
วนซ้ำ for
ห่วงยังคงเป็นไปอย่างรวดเร็ว แต่while
วนซ้ำนั้นเร็วขึ้นเล็กน้อย (สองสามมิลลิวินาที) - และสะอาดกว่า
คำตอบเช่นเดียวกับที่โดยWilco
, Aleksandar Toplek
หรือVitim.us
จะทำผลงานได้อย่างสมบูรณ์แบบ
โดยส่วนตัวแล้วฉันลองใช้วิธีอื่น ฉันพยายามใช้ฟังก์ชันเรียกซ้ำเพื่อวางสตริง / หมายเลข มันทำงานได้ดีกว่าวิธีการเข้าร่วมอาร์เรย์ แต่ยังไม่ได้ทำงานเร็วเท่าห่วง
ฟังก์ชั่นของฉันคือ
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
คุณสามารถใช้ฟังก์ชั่นของฉันด้วยการตั้งค่าตัวแปร padding เช่นนี้
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
โดยส่วนตัวหลังจากการทดสอบของฉันฉันจะใช้วิธีที่มีการวนรอบในขณะที่ชอบAleksandar Toplek
หรือVitim.us
หรืออย่างไรก็ตามฉันจะแก้ไขมันเล็กน้อยเพื่อให้คุณสามารถตั้งค่าสายแพ็ดดิง
ดังนั้นฉันจะใช้รหัสนี้:
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'
คุณสามารถใช้มันเป็นฟังก์ชั่นต้นแบบโดยใช้รหัสนี้:
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'