我试图在JS中模拟C#string.Format()
。
为此,我有一个名为string
的对象和一个名为Format()
的函数作为参数传递,在一个可变函数中,带有占位符的字符串及其值。
一个例子应该是:
string.Format("{0} - {1}", "Hello", "World");
必须返回Hello - World
。
虽然,它只给我" {undefined} - {undefined}"。我使用全局修饰符来获取所有内容,但它不起作用。
var string = {
Format: function() {
var text = arguments[0];
for (i = 1; i < arguments.length; i++) {
var result = text.replace(/([0-9]+)/g, arguments["$1"]);
}
console.log(result);
}
}
我的错误在哪里?
答案 0 :(得分:2)
你总是从最初的字符串开始(忽略之前的替换),并且你的某些部分在它不清楚它应该如何工作的情况下起作用。
这是一个基于您的总体思路的工作实现:
var string = {
Format: function() {
var args = arguments,
result = args[0].replace(/([0-9]+)/g, function(s) { return args[+s+1] });
console.log(result);
return result;
}
}
记录"{Hello} - {World}"
现在,假设您不想保留大括号,并且您还希望确保只更换大括号之间的数字,您可以执行此操作(无需调试日志记录):
var string = {
Format: function() {
var args = arguments;
return args[0].replace(/{([0-9]+)}/g, function(s) {
return args[+s.slice(1,-1)+1]
});
}
}
返回"Hello - World"