如何将num转换为单词



这段代码应该返回'One',我需要将数字转换为单词。为什么没有保存到strEval?

function wordedMath(expr) {
let arrExpr = expr.split(' ');
let arrayOfwords = ['zero', 'one', 'two', 'minus', 'plus'];
let arrayOfnumbers = ['0', '1', '2', '-', '+'];
let strEval = '';
arrExpr.forEach((item, i) => {
let cased = expr.toLowerCase();
if(cased.includes(arrayOfwords)) {
strEval += arrExpr.replace(arrayOfwords[i], arrayOfnumbers[i])
}
});
let result = eval(strEval);
if(result === 1) result = 'One';
if(result === 2) result = 'Two';
if(result === 0) result = 'Zero';
return result;
};
console.log(wordedMath("zero Plus one"))

replace方法不是修改它所调用的实例,而是返回一个新字符串。因此,您需要以下一种方式修改代码:expr = expr.replace(...。此外,重写函数属性是一种糟糕的代码风格,我建议使用局部变量。另一个改进是使用包含单词到其数字表示的映射的查找映射(即Object(,这将允许创建一致的第四次反向转换。

首先,代码根本不可扩展,当您需要进行一点扩展时,这是一个大问题。

请试试这个:

const numWords = {
zero: 0,
one: 1,
two: 2,
plus: "+",
minus: "-",
};
function wordedMath(expr) {
const arrToConvert = expr.split(" ");
let strToEval = "";
arrToConvert.forEach((word) => {
const cased = word.toLowerCase();
strToEval += numWords[cased];
});
const result = eval(strToEval);
return result;
}
console.log(wordedMath("zero Plus one")); // the result is 1

为什么这段代码不能按预期工作与您应该得到的错误有很大关系。即Uncaught SyntaxError: Unexpected token。这样的错误意味着编译器发现了不符合语法的部分代码。考虑到eval函数将一个给定的字符串作为一段JS代码运行,您的字符串expr有一些JS的意外标记。如果调试代码,您应该看到eval后面的expr的值仍然是"zero Plus one"。这就是您的代码无法工作的主要原因。

编辑

p.S。在JS中使用eval是不好的做法。您应该为您的软件考虑一些其他选项。

最新更新