我正在尝试获取数组并在格式字符串中使用其值。
var arry = ["1", "2", "3"];
alert("Numbers {0} equal {2} - {1}.".format(arry));
问题是这会给Number 1,2,3 equals {2}-{1}.
而不是Number 1 equals 3 - 2.
的期望结果。有没有办法得到这个结果而不必做某种for循环?
答案 0 :(得分:0)
function arrayFormat(str, arr) {
return str.replace(/{(\d+)}/g, function(match, m1) {
return (m1 in arr) ? arr[m1] : match;
});
}
这使用String.prototype.replace()
,第二个参数作为函数。它使用括号中每次出现的数字作为键,并将该事件替换为与该键对应的数组中的值。
答案 1 :(得分:0)
你可以试试这个:
String.format = function() {
var s = arguments[0];
for (var i = 0; i < arguments[1].length; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[1][i]);
}
return s;
}
var arry = ["1", "2", "3"];
console.log(String.format("Number {0} equal {2} - {1}.",arry)); //Numbers 1 equal 3 - 2.
console.log(String.format("Number {0} equal {2} - {1}.",'1')); //Numbers 1 equal {2} - {1}.
console.log(String.format("Number {0} equal {2} - {1}.",'12')); //Numbers 1 equal {2} - 2.
console.log(String.format("Number {0} equal {2} - {1}.",'123')); //Numbers 1 equal 3 - 2.