我想做以下
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";
就不可行。
我找到了underscore-tpl library我可以实现我想要的东西,但我想知道是否有其他解决方案供将来参考,因为我很难找到下划线-plp第一名。
我实际使用的情况是我有一个config.json文件,其中我有几个声明,如下所示
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
我使用JSON.parse(...)
解析此consig.json,并使用文件中声明的require("child_process").spawn
,command
和args
参数调用options
,但{ {1}}更改了很多,添加了标记,重新排序和填充了内容,所以简单地执行args
涉及更改调用config.task1.args[1] = "<input value>";
的代码,这很容易出错。
基于the accepted answer我创建了一个简单的包(located here),我可以将其包含在我的项目中,随时使用它。
答案 0 :(得分: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);
}
答案 1 :(得分:1)
我建议您使用一个非常简单但非常快且可理解的模板引擎: simple-template.js
它由22行代码组成,非常简单! 考虑到这一点,您将能够轻松渲染您的配置!