我想有效地 (一个遍历字符串,而不是更多),将字符串中的1,2,3值替换为其文本表示形式s.t。一二三。 JS中最有效的方法是什么?
示例:
输入:Old value '2', new value: '1', predicted value: '3'
输出:Old value 'two', new value: 'one', predicted value: 'three'
这是我想出的解决方案:
function formatActionInSysHistory(strValue) {
let dict = {
1: 'one',
2: 'two',
3: 'three'
}
foo = strValue.replace(/[123]/g, val => dict[val])
console.log(foo)
}
formatActionInSysHistory("Old value '2', new value: '1', predicted value: '3'")
答案 0 :(得分:1)
您可以使用regular expression
。下面是一个示例。
let str = "Old value '2', new value: '1', predicted value: '3'";
const mapObj = {
1:"one",
2:"two",
3:"three"
};
const replaceAll = (str, mapObj) => {
const re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
console.log(replaceAll(str, mapObj));
答案 1 :(得分:1)
怎么样?
var demoStr = "Old v1alue '2', new value: '1', predicted value: '3'"
function convertStr(str){
console.time('convertStr')
let enNum = ['zero','one','two','three']
str = str.replace(/(\d)/g,(matched,p1)=>{
return p1 && enNum[p1]
})
console.timeEnd('convertStr')
return str
}
convertStr(demoStr)
答案 2 :(得分:0)
要回答我自己的问题,如果有任何需要的话:
function formatActionInSysHistory(strValue) {
let dict = {
1: 'one',
2: 'two',
3: 'three'
}
foo = strValue.replace(/[123]/g, val => dict[val])
console.log(foo)
}
formatActionInSysHistory("Old value '2', new value: '1', predicted value: '3'")
还有更多示例,例如here。