Javascript 是否可以简化一系列String.replace操作?

Javascript 是否可以简化一系列String.replace操作?,javascript,Javascript,有没有办法简化这个函数?在最后270个字符的代码中,只有50个字符是它们各自语句的唯一字符。非常不雅。请不要jQuery-我想要一个普通的Javascript解决方案。非常感谢 function numbersToLetters(number) { var n = number.toString(); var l = n.replace('1', 'One'); l = l.replace('2', 'Two'); l = l.replace('3', 'Thre

有没有办法简化这个函数?在最后270个字符的代码中,只有50个字符是它们各自语句的唯一字符。非常不雅。请不要jQuery-我想要一个普通的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');
}

您可以创建一个地图:

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;
}
尝试使用列表:

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;
};
var replacementList=[
“零”,
“一个”,
“两个”,
“三”,
“四”,
“五个”,
“六”,
“七”,
“八”,
“九”
];
功能编号记事本(编号){
var numberString=number.toString();
对于(变量i=0;i

这支持混合内容的字符串。

请不要您的请求不仅仅是重构,还有一个问题


<> fWw,考虑代码在重复数上失败,例如1111的输入,结果是111。- 如果使用循环(
for
while
…),可以很容易地解决这个问题,但更简单的是:

  • 利用
  • 对于可以设置全局标志的第一个参数,使用a:
    /\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];
    });

}

除非我遗漏了什么,否则这就是“香草Javascript”。是的,这正是代码审查的目的:)@Qix我想他的意思是他不希望任何人使用library/framework.FWIW发布答案,考虑代码在重复的数字上失败,例如输入代码< 1111 > /代码>,导致代码< On111。虽然这是基本的方法,但是我应该注意到,和原来一样,它不能代替重复的数字。
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];
    });

}