我想知道是否有一种简单的方法可以在标记的模板函数中检索变量名称。更清楚地说,这是代码:
let date = "2018"; //can be undefined
let description = "my description"; //can be undefined
let age; //can be undefined, and it is here
function processString(parts) {
var res = parts[0];
for (var i=1; i<parts.length; i++) {
if (arguments[i]) res += /*** arguments[i] is the value, I want to append the variable name too***/ arguments[i];
res += parts[i];
}
return res;
}
console.log(processString`
${date}
${description}
${age}
`);
这是结果
2018
my description
20
我要这个
date: 2018
description: my description
age: 20
编辑:
整个目的是生成一个“可选”行的列表(当然原始代码更复杂,实际上它生成一个类似 SQL 的查询),但是如果定义了变量 arguments[i] 我想附加到结果string "variable_name: variable_value"请注意我编辑了函数 processString
。
如果有任何解决方案,我更愿意编辑 processString
并保持干净的 console.log
最佳答案
为了扩展 Angelas 的回答,您可以传入对象文字,如:
{name}
与
相同{"name" : name}
因此您可以访问名称和值。模板看起来像:
function template(str, ...args) {
let result = "";
for(var i = 0; i < str.length - 1; i++) {
result += str[i];
result += Object.entries(args[i])[0].join(" : ");
}
result += str[i];
return result;
}
这样你就可以:
template`
1 - ${{date}}
2 - ${{description}}
`;
关于javascript - 获取在标记模板中传递的变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51012735/