ค้นหาเว็บไซต์

String.Format เหมือน C# ใน TypeScript


เป็นไปได้ไหมที่จะใช้ฟังก์ชันที่คล้ายกับ String.Format ของ C# ใน TypeScript?

ความคิดของฉันคือการสร้างสตริงบางอย่างเช่น:

url = "path/{0}/{1}/data.xml"

ขึ้นอยู่กับตรรกะที่ฉันตั้ง {0} และ {1} แน่นอนว่าฉันสามารถแทนที่พวกมันได้ แต่ฉันคิดว่า String.Format เป็นฟังก์ชันที่ชัดเจน

คำตอบ #1

ฉันคิดว่าคุณกำลังมองหาตัวอักษร back quote: ``

var firstname = 'Fooo';
var lastname = 'Bar';

console.log(`Hi ${firstname} ${lastname}. Welcome.`);

คุณสามารถหาตัวอัญประกาศกลับได้บนปุ่มตัวหนอน

คำตอบ #2

const StringFormat = (str: string, ...args: string[]) =>
  str.replace(/{(\d+)}/g, (match, index) => args[index] || '')

let res = StringFormat("Hello {0}", "World!")
console.log(res) // Hello World!
res = StringFormat("Hello {0} {1}", "beautiful", "World!")
console.log(res) // Hello beautiful World!
res = StringFormat("Hello {0},{0}!", "beauty")
console.log(res) //Hello beauty,beauty!
res = StringFormat("Hello {0},{0}!", "beauty", "World!")
console.log(res) //Hello beauty,beauty!

ลองใน TypeScript Playground

คำตอบ #3

ขยายความจากความคิดเห็นที่ฉันได้ทำไว้เกี่ยวกับการตอบกลับจาก vivekkurien การประกาศฟังก์ชันซึ่งจากนั้นจะทำการแทรกค่า เป็นวิธีที่ให้ผลลัพธ์มากที่สุดต่อความพยายามของคุณ ฉันมักใช้วิธีนี้บ่อย ๆ สำหรับการสร้างชิ้นส่วนของ HTML ที่ซ้ำซ้อนพร้อมคุณสมบัติที่แตกต่างกันเล็กน้อย ตัวอย่างเช่น

คำตอบจาก vivekkurien อย่างไรก็ตาม ไม่ได้ผล มันกลับมาด้วยสตริงตัวอักษรแทน นี่คือตัวอย่างที่แก้ไขแล้ว โดยอิงจากคำตอบต้นฉบับ:

const pathFn = (param1, param2) => `path/${param1}/${param2}/data.xml`;

let param1 = "student";
let param2 = "contantdetails";
let resultPath = pathFn(param1, param2);

alert(resultPath);

ตัวอย่างโค้ดข้างต้นที่สามารถรันได้สามารถดูได้ที่นี่: การอินเตอร์โพเลชันแบบฟังก์ชันที่ TypeScript Playground

บทความที่เกี่ยวข้อง