在 JavaScript 个对象中插入模板变量的方法
Ways to interpolate template variables inside JavaScript objects
我想做以下事情
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 可以实现我想要的东西,但我想知道是否有其他解决方案供将来参考,因为我很难找到 underscore-tpl第一名。
我的实际使用情况是我有一个 config.json 文件,其中有几个声明,如下所示
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
我使用 JSON.parse(...)
解析此 consig.json,并使用在文件,但是 args
改变了很多,添加了标志,重新排序等等,所以简单地做 config.task1.args[1] = "<input value>";
涉及更改调用 spawn
的代码,这很容易出错。
更新
基于 I've created a simple package (located here),我可以将其包含在我的项目中,请随意使用它。
您可以 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);
}
我向您推荐一个非常简单但非常快速且易于理解的模板引擎:
simple-template.js
22行代码,非常简单!
考虑到这一点,您将能够轻松呈现您的配置!
我想做以下事情
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 可以实现我想要的东西,但我想知道是否有其他解决方案供将来参考,因为我很难找到 underscore-tpl第一名。
我的实际使用情况是我有一个 config.json 文件,其中有几个声明,如下所示
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
我使用 JSON.parse(...)
解析此 consig.json,并使用在文件,但是 args
改变了很多,添加了标志,重新排序等等,所以简单地做 config.task1.args[1] = "<input value>";
涉及更改调用 spawn
的代码,这很容易出错。
更新
基于
您可以 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);
}
我向您推荐一个非常简单但非常快速且易于理解的模板引擎: simple-template.js
22行代码,非常简单! 考虑到这一点,您将能够轻松呈现您的配置!