ข้อกำหนดของคำถามเดิมไม่สามารถใช้ประโยชน์จากการแก้ไขสตริงได้อย่างชัดเจนเนื่องจากดูเหมือนว่าเป็นการประมวลผลรันไทม์ของคีย์ทดแทนโดยพลการ
อย่างไรก็ตามหากคุณต้องทำการแก้ไขสตริงคุณสามารถใช้:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
สังเกตแบ็กติกที่คั่นสตริงซึ่งเป็นสิ่งจำเป็น
สำหรับคำตอบที่ตรงกับความต้องการของ OP คุณสามารถใช้String.prototype.replace()
สำหรับการเปลี่ยนได้
รหัสต่อไปนี้จะจัดการการจับคู่ทั้งหมดและไม่แตะต้องโดยไม่มีการแทนที่ (ตราบใดที่ค่าการแทนที่ของคุณเป็นสตริงทั้งหมดหากไม่เป็นเช่นนั้นโปรดดูด้านล่าง)
var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
str = 'My Name is %NAME% and my age is %AGE%.';
str = str.replace(/%\w+%/g, function(all) {
return replacements[all] || all;
});
jsFiddle
หากการแทนที่บางรายการของคุณไม่ใช่สตริงตรวจสอบให้แน่ใจว่ามีอยู่ในวัตถุก่อน หากคุณมีรูปแบบดังตัวอย่างเช่นมีเครื่องหมายเปอร์เซ็นต์คุณสามารถใช้ตัวin
ดำเนินการเพื่อให้บรรลุสิ่งนี้
jsFiddle
อย่างไรก็ตามหากรูปแบบของคุณไม่มีรูปแบบพิเศษเช่นสตริงใด ๆ และอ็อบเจ็กต์การแทนที่ของคุณไม่มีnull
ต้นแบบให้ใช้Object.prototype.hasOwnProperty()
เว้นแต่คุณจะสามารถรับประกันได้ว่าสตริงย่อยที่ถูกแทนที่ที่เป็นไปได้ของคุณจะไม่ขัดแย้งกับชื่อคุณสมบัติบนต้นแบบ
jsFiddle
มิฉะนั้นหากสตริงแทนที่ของคุณเป็น'hasOwnProperty'
คุณจะได้รับผลลัพธ์ที่ยุ่งเหยิงสตริง
jsFiddle
ตามหมายเหตุด้านข้างคุณควรเรียกว่าreplacements
an Object
ไม่ใช่Array
.