我知道有很多人在询问如何将字符串转换为整数/数字。但我无法找到我正在寻找的东西。
我正在尝试将数学问题转换为整数。这是我的代码:
var str = '1 + 5';
var answer = parseInt(str);
console.log(answer);
输出:1
首选输出:6
答案 0 :(得分:3)
最简单的答案是使用eval()
:
var answer = eval('1 + 5');
这会将6
分配给answer
。
当然,eval()
允许任意代码执行,因此如果字符串来自未知或不可信的源,则可以使用exceptionally dangerous函数。在这种情况下,您可能需要考虑使用PegJS
答案 1 :(得分:2)
如果您知道脚本的来源,可以使用函数eval
,请注意这种方法。
var str = '1 + 5';
var answer = eval(str);
console.log(answer);

答案 2 :(得分:0)
SBPV_DBPV.loc[i, 'cluster'] = min(dist1,dist2,dist3)
答案 3 :(得分:0)
'1 + 5'
是一个完整的字符串,在这种情况下,你可以打破字符串并添加该数组的每个元素
var str = '1 + 5';
var strArray = str.split('+');
var answer = 0;
strArray.forEach(function(item) {
answer += parseInt(item, 10)
})
console.log(answer);
答案 4 :(得分:0)
Here's a prior post that meets your needs using third party libraries.
为了解释,math.js和JavaScript Expression Evaluator都可以解析您提供的输入,然后计算表达式的含义。
我还建议您阅读有关Lexers和Tokenization的内容,以便自己学习如何分解表达式,然后尝试解析生成的标记。这也有助于解决更复杂的问题,例如评估更高级别数学的表达式,或者处理自然语言或代码的意义或正确性。
Here's a basic lexer guide for JS
And here's some resources on parsing mathematical expressions
答案 5 :(得分:0)
另一个Function
构造函数。
eq = '1 + 5';
x = new Function('return ' + eq)();
console.log(x)

runMath = x => new Function(`return ${x}`)();
console.log(runMath('1+5'))
console.log(runMath('2*10'))

答案 6 :(得分:0)
所以parseInt
给你1的原因是因为parseInt
遍历字符串直到第一个非数字字符,并返回结果。它被“+”绊倒,只返回1
。答案不需要,但仍然需要添加一些有趣的内容。如果您使用的是Number()
构造函数,则始终会获得NaN
。出于这个原因,许多人会告诉你使用Number
构造函数,但我认为有两种情况都可以。
要在不使用eval
的情况下完成您想要的任务(您可能永远不会使用它,请参阅here了解相关信息),您可以拆分字符串并分别解析每个项目。最简单的方法是使用String.split()
和Array.map()
function isNumber(n){
return !isNaN(n)
}
var t = '1 + 5 + 7'
//split the string at whitespace into an array
//this looks like ['1', '+', '5', '+', '7']
var x = t.split(' ')
//convert each item to a number, parseInt works here as well
//this ouputs [1, NaN, 5, NaN, 7]
.map(Number)
//filter out anything that couldn't be converted
//and you're left with [1,5,7]
.filter(isNumber)
//add each item in the array to get a sum result
.reduce((a, b) => a + b)
console.log(x) //outputs 13
仅当字符串中的运算符相同时才有效,但您可以添加测试以查看哪个运算符是哪个运算符,并传递不同的函数以减少以获得所需的结果。如果您有兴趣掌握javascript,我强烈建议您详细了解Array.map(),Array.filter()和Array.reduce()。这些函数非常有用,可能是我在整个语言中最喜欢的一组函数。
答案 7 :(得分:0)
如果您不想使用eval
,但仍希望保持代码的简单,请使用正则表达式匹配数字和运算符,并使用switch
选择合适的代码您的运营商的案例:
function parser(str) {
const match = str.match(/(\d+) ([\+\-\*\/]) (\d+)/).slice(1);
const operator = match.splice(1, 1)[0];
const numbers = match.map(Number);
switch(operator) {
case '+': return numbers[0] + numbers[1];
case '-': return numbers[0] - numbers[1];
case '*': return numbers[0] * numbers[1];
case '/': return numbers[0] / numbers[1];
}
}
console.log(parser('1 + 2'));
console.log(parser('1 - 2'));
console.log(parser('2 * 2'));
console.log(parser('1 / 21'));