从 JSON 生成变量以在字符串模板 (Javascript) 中使用

Generate variables from JSON to use in string template (Javascript)

我有一些 JSON 看起来有点像这样:

component.json

[
  { "template": "<div class="${layout} ${border}"></div>" },
  {
    "layout": "grid",
    "border": "primary"
  }
]

我正在使用这个 JSON 通过 JS 生成一些 HTML,但我不知道如何将“布局”和“边框”变成我可以添加的变量进入我的模板字符串。

对于上下文,我不能只是对变量进行硬编码,在我的 JSON 中,我无法预测会有多少变量或它们是什么。

我正在尝试这样的事情:

const template = componentJSON[0].template
const classes = componentJSON[1]

for (const [key, value] of Object.entries(classes)) {
    eval('var ' + `${key}` + ' = ' + '"' + `${value}` + '"')
}

let html = eval('`' + template + '`')

我知道 eval 的 EVIL,所以我很高兴听到其他解决方案,但也很高兴听到 eval 的选项,因为它永远不会受到攻击。

我不确定为什么应该使用 eval 创建变量的 for 循环不起作用?也许 eval 是专门为不创建变量而构建的?我可以改用 new Function() 吗?

作为参考,我希望得到的结果应该是:

<div class="grid primary"></div>

不需要为此使用 eval()。将 replace() 方法与匹配 ${...} 的正则表达式一起使用并替换为相应的对象 属性.

let componentJSON = [
  { "template": "<div class='${layout} ${border}'></div>" },
  {
    "layout": "grid",
    "border": "primary"
  }
];

const template = componentJSON[0].template
const classes = componentJSON[1]

let html = template.replace(/$\{(.*?)\}/g, (match, key) => classes[key]);

console.log(html);