Вимоги оригінального запитання явно не могли б отримати вигоду від інтерполяції рядків, оскільки, схоже, це обробка під час виконання довільних ключів заміни.
Однак , якщо вам просто довелося виконати інтерполяцію рядків, ви можете використовувати:
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
а Object
, а не ані Array
.