Các yêu cầu của câu hỏi ban đầu rõ ràng không thể hưởng lợi từ nội suy chuỗi, vì có vẻ như đó là một quá trình xử lý thời gian chạy của các khóa thay thế tùy ý.
Tuy nhiên , nếu bạn chỉ phải thực hiện nội suy chuỗi, bạn có thể sử dụng:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
Lưu ý rằng các dấu gạch ngược phân cách chuỗi, chúng là bắt buộc.
Để có câu trả lời phù hợp với yêu cầu của OP cụ thể, bạn có thể sử dụng String.prototype.replace()
cho các thay thế.
Mã sau sẽ xử lý tất cả các kết quả phù hợp và không chạm vào các kết quả mà không cần thay thế (miễn là các giá trị thay thế của bạn là tất cả các chuỗi, nếu không, hãy xem bên dưới).
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 .
Nếu một số thay thế của bạn không phải là chuỗi, trước tiên hãy đảm bảo rằng chúng tồn tại trong đối tượng. Nếu bạn có một định dạng như ví dụ, tức là được bao bọc trong các dấu phần trăm, bạn có thể sử dụng in
toán tử để đạt được điều này.
jsFiddle .
Tuy nhiên, nếu định dạng của bạn không có định dạng đặc biệt, tức là bất kỳ chuỗi nào và đối tượng thay thế của bạn không có null
nguyên mẫu, hãy sử dụng Object.prototype.hasOwnProperty()
, trừ khi bạn có thể đảm bảo rằng không có chuỗi con nào được thay thế tiềm năng của bạn sẽ xung đột với tên thuộc tính trên nguyên mẫu.
jsFiddle .
Ngược lại, nếu chuỗi thay thế của bạn là 'hasOwnProperty'
, bạn sẽ nhận được một chuỗi bị lộn xộn.
jsFiddle .
Lưu ý thêm, bạn nên được gọi là replacements
an Object
, không phải an Array
.