Javascript 如何修复用于转换数字的for循环

Javascript 如何修复用于转换数字的for循环,javascript,Javascript,我正在尝试构建一个函数来将字母(“两千九百三十三”)转换为数字(2093)。 到目前为止,它仍在运行,但只适用于某些数字。它可以正常工作,直到它从1000到达数字。从这里开始,一切都是错误: parseInt("eight thousand two hundred thirty-three") // returns 8135 parseInt("seven thousand nine hundred ninety eight") // returns 7207 parseInt("three t

我正在尝试构建一个函数来将字母(“两千九百三十三”)转换为数字(2093)。 到目前为止,它仍在运行,但只适用于某些数字。它可以正常工作,直到它从1000到达数字。从这里开始,一切都是错误:

parseInt("eight thousand two hundred thirty-three") // returns 8135
parseInt("seven thousand nine hundred ninety eight") // returns 7207
parseInt("three thousand eight hundred ninety nine") // returns 3207
函数parseInt(字符串){
变量numberContainer=[]
常数leyend=[
[“一”、“一”、“二”、“二”、“三”、“三”、“四”、“四”、“五”、“五”、“六”、“六”、“七”、“七”、“八”、“八”、“九”、“九”、“十”、“十”、“二十”、“二十”、“三十”、“三十”、“四十”、“四十”、“五十”、“五十”、“六十”、“六十”],
[“七十”、“七十”、“八十”、“八十”、“九十”、“九十”],
[“十一”、“十一”、“十二”、“十二”、“十三”、“十三”、“十四”、“十四”、“十五”、“十五”、“十六”、“十六”、“十七”、“十七”、“十八”、“十八”、“十九”、“十九”、“一百”、“一百”],
[“千”,千],“-”,假],“和”,假]
]
var stringContainer=string.split(“”);
console.log(stringContainer)
对于(设i=0;i,您可以使用它来缩短一行中的所有代码:

array.reduce((a, b) => a < b ? a*b : a+b);
array.reduce((a,b)=>a
例如:

const数组=[2,1000,40,6]
const result=array.reduce((a,b)=>aconsole.log(result);
如果要计算数字量并比较长度,可以将数字转换为字符串

像这样:

(“+numberContainer[i+1]).length>(“+numberContainer[i]).length


但是,这只适用于整数

您的算法的工作原理与您认为的不同:

  • 获取第一个数字,将其与第二个数字进行比较,决定要做什么(21000=>2000)-好的,definitiveNumber=2000

  • 从数组中获取第二个数字,将其与第三个数字进行比较,决定要做什么(1000,40=>1040)-不考虑,definitiveNumber=3040

  • 从数组中获取第三个数字,将其与第四个数字进行比较,决定要做什么(40,6=>46)-好,definitiveNumber=3086

  • 算法停止,因为第四个之后没有项目

  • 您的结果是:3086

    你想比较这些数字,然后跳过它们吗

    constnumbercontainer=[2,1000,40,6]
    设定义数=0;
    for(设i=0;inumberContainer[i+1]){
    定义数字+=数字容器[i]+数字容器[i+1]
    }
    //这就是解决办法
    我++
    }
    
    console.log(definitiveNumber)//预期输出:2046
    首先,您的代码不是函数声明,这就是为什么您不能使用
    return
    statement“如果下一个具有更大的x10”是什么意思?你能提供更好的例子来说明期望的结果吗?没有其他条件的解释。如果下一个稍大一点怎么办?比如40和41,你是乘法还是求和?你的意思是“如果下一个有更大的x10”,那么它是100还是更大?(.即至少有3个数字?或者它除以100等于1或更多)回答得很好!我原以为他想要的是
    a*10
    ,但代码与文本解释不匹配,那是谁knows@salvatore是的,如果OP提供更多的例子和更好的解释,也许我们可以提供更好的答案。否则,reduce的MDN参考非常好,我认为这个解决方案会失败,因为a像这样排列:
    [2,1000,6,40]
    -它产生2046个,而它应该产生2240个(就我所理解的问题而言)。这太神奇了,尽管对于8233这个数字,它产生8135个。如果我解释得不好,我现在就用完整的代码更新OP,以示歉意。