我有以下Scenerio,其中有以下字符串
Edit: const message = results.doc.data().taskSettings.taskInProgressSettings.pushNotifications.onAssignmentNotifyEmployee.message;
我从db获得消息,变量不一定是taskId , customerName
。它可以是taskId , customerName , customerId, taskCreaterName , employeeName , employeeId
。该消息可能包含上述任何变量,我需要在运行时用其值替换它们。
message:`Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}`
let taskId = T-100;
let taskCreaterName = 'mark';
let customerName = 'henry';
并且我想用其值替换变量(taskId,taskCreaterName,customername),最终结果应为以下内容,
newMessage = Task T-100 assigned by mark for customer henry
实现此目标的最佳方法是什么。谢谢
答案 0 :(得分:1)
您可以将具有目标名称的值存储在对象中,并使用.replace()
将字符串的目标部分替换为对象中的值。如果对象中存在具有匹配名称的值,则将其替换为值。
var message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName} and ${newVar}';
var values = {
taskId: 'T-100',
taskCreaterName: 'mark',
customerName: 'henry'
};
var newStr = message.replace(/\$\{(\w+)\}/g, function(match, cont){
return typeof values[cont] !== 'undefined' ? values[cont] : match;
})
console.log(newStr);
答案 1 :(得分:1)
要以通用方式进行此工作,您可以保留1个对象(例如我在下面创建的“ withData”,而不是维护不同的变量)来存储要替换的值,并让通用函数(替换)处理所有如下所示的更改
let message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}'
let withData = {
taskId: 'T-100'
, taskCreaterName: 'mark'
, customerName: 'henry'
}
function replace(obj, withData) {
let result = message.slice(0)
for (let [key, value] of Object.entries(withData)) {
result = result.replace('${' + key + '}', value)
}
return result
}
let result = replace(message, withData)
console.log(result)
// In case Object.entries is not supported
function replace(obj, withData) {
let result = message.slice(0)
for (let key in withData) {
let value = withData[key]
result = result.replace('${' + key + '}', value)
}
return result
}
答案 2 :(得分:0)
您无需执行任何操作。 Js将在运行时将变量替换为value。
答案 3 :(得分:0)
这可能是完成您正在寻找的事情的最简单方法:
let taskId = 'T-100';
let taskCreaterName = 'mark';
let customerName = 'henry';
let newMessage = 'Task ' + taskId + ' assigned by ' + taskCreaterName + ' for customer ' + customerName;
newMessage的位置为“任务T-100由标记分配给客户,这是对客户的要求”。
答案 4 :(得分:0)
根据您代码中未提供的T
的值,我将假定它具有有效的整数。
let T = parseInt(Math.random() * 1000);
let taskId = T-100;
let taskCreaterName = 'mark';
let customerName = 'henry';
//assuming T-100 is a result of an expression, you would do something like:
console.log(`Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}`);
//assming T-100 is a litral string, then you don't need to parse it at all
console.log(`Task T-100 assigned by ${taskCreaterName} for customer ${customerName}`);
答案 5 :(得分:0)
您可以将String#replace
用于自定义回调和eval
(name
仅包含字符[a-zA-z0-9]
,因此应该是安全的)
var message = 'Task ${taskId} assigned by ${taskCreaterName} for customer ${customerName}';
let taskId = 'T-100';
let taskCreaterName = 'mark';
let customerName = 'henry';
var newMessage = message.replace(/\${([\w]+)}/g, function(match, name){
return eval(name);
})
console.log(newMessage);