有没有办法简化这个功能?在最后270个字符的代码中,只有50个字符对于它们各自的语句是唯一的。非常不优雅。没有jQuery请 - 我宁愿拥有一个vanilla Javascript解决方案。非常感谢!
function numbersToLetters(number) {
var n = number.toString();
var l = n.replace('1', 'One');
l = l.replace('2', 'Two');
l = l.replace('3', 'Three');
l = l.replace('4', 'Four');
l = l.replace('5', 'Five');
l = l.replace('6', 'Six');
l = l.replace('7', 'Seven');
l = l.replace('8', 'Eight');
l = l.replace('9', 'Nine');
l = l.replace('0', 'Zero');
}
答案 0 :(得分:8)
您可以创建地图:
var map = {
"1" : "One",
"2" : "Two",
...
}
function numbersToLetters(number) {
var l = "" + number;
for(var num in map){
if(!map.hasOwnProperty(num)) continue;
l = l.replace(num, map[num]);
}
return l;
}
答案 1 :(得分:1)
var map = ['Zero', 'One', 'Two', 'Three', 'Four',
'Five', 'Six', 'Seven', 'Eight', 'Nine'];
function numbersToLetters(number) {
number = number.toString();
var string = '';
for(var l in number) {
string += map[number[l]] || number[l];
}
return string;
}
alert(numbersToLetters('1 and 2'));
这支持混合内容的字符串。
答案 2 :(得分:0)
尝试使用列表:
var replacementList = [
"Zero" ,
"One" ,
"Two" ,
"Three" ,
"Four" ,
"Five" ,
"Six" ,
"Seven" ,
"Eight" ,
"Nine"
];
function numbersToLetters(number) {
var numberString = number.toString();
for (var i = 0; i < replacementList.length; i++) {
numberString.replace(i, replacementList[i]);
}
return numberString;
};
答案 3 :(得分:0)
请不要你的请求不仅仅是重构,还有一个问题
FWIW,考虑到代码在重复的数字上失败,例如输入1111导致One111。 - user2864740
如果使用循环(for
,while
...)可以轻松解决,但更简单:
String.prototype.replace
RegExp
作为您可以设置全局标记的第一个参数:/\d/g
以下是示例:
function numbersToLetters(number) {
var n = '' + number, r = {
'1': 'One',
'2': 'Two',
'3': 'Three',
'4': 'Four',
'5': 'Five',
'6': 'Six',
'7': 'Seven',
'8': 'Eight',
'9': 'Nine',
'0': 'Zero'
};
return n.replace(/\d/g, function (matched) {
return r[matched];
});
}