Подстановка совпавших символов со значением из объекта - PullRequest
2 голосов
/ 16 мая 2019

У меня есть следующая строка:

{hours}/DP1/{facilityId}/CP23/{minutes}

и иметь объект, который:

{
  hours: 4,
  facilityId: "abd-rtyo-99e",
  minutes: 43
}

Я хочу получить строку вывода как:

4/DP1/abd-rtyo-99e/CP23/43

тем самым заменяя любой токен внутри {} значением из объекта. Таким образом, hours внутри {} заменяется на 4 от объекта, minutes на 43 и так далее. Как я мог это сделать?

Я мог бы обнаружить символы внутри {}, используя регулярное выражение типа {\w+}, но не знаю, как с ним работать.

Ответы [ 3 ]

1 голос
/ 16 мая 2019

Один из вариантов - сопоставить символы слова и использовать функцию заменителя, которая проверяет, существует ли ключ на объекте - если да, вернуть соответствующее значение:

const input = '{hours}/DP1/{facilityId}/CP23/{minutes}';
const obj = {
  hours: 4,
  facilityId: "abd-rtyo-99e",
  minutes: 43
};
const output = input.replace(
  /{(\w+)}/g,
  (match, possibleKey) => obj[possibleKey] ? obj[possibleKey] : match
);
console.log(output);
// 4/DP1/abd-rtyo-99e/CP23/43
1 голос
/ 16 мая 2019

Другим вариантом может быть использование Object.entries и использование ключа и значения при замене:

let obj = {
  hours: 4,
  facilityId: "abd-rtyo-99e",
  minutes: 43
};
let str = '{hours}/DP1/{facilityId}/CP23/{minutes}';
Object.entries(obj).forEach(([key, value]) => {
  str = str.replace(`{${key}}`, value);
});

console.log(str);
1 голос
/ 16 мая 2019

Вы можете перебрать все ключи объекта, используя for..in, а затем replace() ключ в исходной строке со значением ключа

let str = '{hours}/DP1/{facilityId}/CP23/{minutes}'

const obj = {
  hours: 4,
  facilityId: "abd-rtyo-99e",
  minutes: 43
}
let result = str;
for(let k in obj){
  result = result.replace(`{${k}}`,obj[k]);
}
console.log(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...