Способы интерполяции переменных шаблона внутри объектов JavaScript
я хотел бы сделать следующее
var obj = {
animal: "${animal}"
};
var res = magic(obj, {animal: "cat"});
// res => {animal: "cat"}
magic
- это функция, которая выполняет грязную работу. Очевидно obj
может быть более сложным с несколькими ключами, вложенными массивами и так далее. Переменная шаблона может находиться внутри массива, подобного этому
var obj = {
animals: ["cat", "dog", "${animal}", "cow"]
};
и он может быть где угодно в массиве так просто делать obj.animals[2] = "bat";
невозможно.
я нашел подчеркивание-библиотека tpl С которым я могу достичь того, чего хочу, но я бы хотелось бы знать, есть ли другие решения для дальнейшего использования и потому, что мне было трудно найти подчеркивание-tpl в первую очередь.
мое фактическое использование-это то, что у меня есть конфигурация.JSON-файл, где у меня есть несколько объявлений, таких как
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
я разбираю этот консиг.JSON с использованием JSON.parse(...)
и я называю require("child_process").spawn
С command
, args
и options
параметры, объявленные в файле, однако args
изменить много, флаги добавлены, переупорядочены и прочее, так что просто делать config.task1.args[1] = "<input value>";
включает в себя изменение кода, который вызывает spawn
и это так же подвержено ошибкам, как и получается.
обновление
на основе принято отвечать я создал простой пакет (расположенном здесь), которые я могу включить в свои проекты, не стесняйтесь использовать его.
2 ответов
вы можете JSON.stringify
объект, затем замените значение поиска фактическим значением, затем JSON.parse
результат:
function magic(o, a) {
var j = JSON.stringify(o);
for (var k in a) {
j = j.split('${'+k+'}').join(a[k]);
}
return JSON.parse(j);
}
Я предлагаю вам очень простой, но очень быстрый и понятно шаблонизатор : простой-шаблон.js
состоит из 22 строк кода, очень удобно! Учитывая это, вы сможете легко отобразить свою конфигурацию!