我有一些模板文字作为json文件中的值。当我访问这些值时,我需要变量的值而不是模板文字的字符串。
我尝试像这样添加反引号(`),但没有用:
value = '`' + value + '`';
这是我要运行的代码的一部分:
const map = require('./mapping.json');
// declared here for testing
const engagement_id = '000909000132';
const start_date = '08/08/2011';
let obj = {};
for (let header in map) {
value = map[header].value;
// Do other things
obj[header] = value;
}
我的mapping.json看起来像这样:
{
"C_ID": {
"value": "16520780,${engagement_id}"
},
"C_DATE": {
"value": "${start_date}",
"format": "mm/dd/yy",
},
"SURV_TYPE": {
"value": "S"
}
}
console.log(obj)给我这个:
{ C_ID: '16520780,${engagement_id}',
C_DATE: '${start_date}',
SURV_TYPE: 'S' }
但是我想要的是对象具有这样的变量的实际值:
{ C_ID: '16520780,000909000132',
C_DATE: '08/08/2011',
SURV_TYPE: 'S' }
答案 0 :(得分:0)
模板文字是JavaScript源代码的一部分。
您不能将JavaScript源代码放在字符串中然后使用它:它是数据,而不是代码。
您可以使用eval()
,但这会带来很多问题和安全风险。
改为使用模板库。例如,Nunjucks。
const map = {
"C_ID": {
"value": "16520780,{{engagement_id}}"
},
"C_DATE": {
"value": "{{start_date}}",
"format": "mm/dd/yy",
},
"SURV_TYPE": {
"value": "S"
}
};
const engagement_id = '000909000132';
const start_date = '08/08/2011';
let obj = {};
for (let header in map) {
const value = nunjucks.renderString(map[header].value, {
engagement_id,
start_date
})
obj[header] = value;
}
console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/nunjucks/3.0.1/nunjucks.min.js"></script>
答案 1 :(得分:0)
您可以将String.replace()
与一个函数一起使用以返回相应的值:
const map = {
"C_ID": {
"value": "16520780,${engagement_id}"
},
"C_DATE": {
"value": "${start_date}",
"format": "mm/dd/yy",
},
"SURV_TYPE": {
"value": "S"
}
};
const values = {
engagement_id: '000909000132',
start_date: '08/08/2011',
};
const replacer = (match, p1) => (values[p1]);
let obj = {};
for (let header in map) {
value = map[header].value.replace(/\${(.+)}/, replacer);
// Do other things
obj[header] = value;
}
console.log(obj);