如何在javascript中将字符串方程转换为数字?
说我有“100 * 100”或“100x100”我如何评估并转换为数字?
答案 0 :(得分:5)
这将为您提供该字符串是使用*
还是x
的产品:
var str = "100x100";
var tmp_arr = str.split(/[*x]/);
var product = tmp_arr[0]*tmp_arr[1]; // 10000
答案 1 :(得分:4)
如果你确定字符串总是像“100 * 100”那样你可以eval()
它,虽然大多数人都会告诉你这不是一个好主意,因为人们的事实可以通过恶意代码进行评估。
eval("100*100");
>> 10000
否则,您必须找到或编写自定义方程解析器。在这种情况下,您可能需要查看Shunting-yard algorithm,并阅读parsing。
使用split()
:
var myEquation = "100*100";
var num = myEquation.split("*")[0] * myEquation.split("*")[1];
>> 10000
答案 2 :(得分:0)
使用parseInt(),parseInt()函数解析一个字符串并返回一个整数。
parseInt("100")*parseInt("100") //10000
答案 3 :(得分:0)
我对用户的回答有不同的看法,该问题使用split给出输出,但也重新创建原始方程式。我看到的其他答案都使用了split,但实际上并没有给出可以以字符串格式开头的原始方程式参数化的相关性。
使用split()
和for
并不是一个好的解决方案,但是我在这里使用它来说明不需要知道数组中数字的数量(这会减少)的更好的解决方案。之所以起作用,是因为实际上它的作用类似于reduce,但是它需要您根据数组的大小来编辑for循环乘数:
let someEnvironmentVariable = '3*3*3'
let equationString = someEnvironmentVariable;
// regex to match anything in the set i.e. * and + << not sure if need the ending +
let re = /[\*\+]+/;
let equationToNumberArray = equationString.split(re).map(Number);
let equationResolver = 0;
for (const numericItem of equationToNumberArray) {
// recreate the equation above
equationResolver += numericItem*numericItem;
}
console.log(equationResolver);
一个更优雅的解决方案是使用:
split()
,map()
和reduce()
let someEnvironmentVariable = '3*3*4*3'
let equationString = someEnvironmentVariable;
// regex to match anything in the set i.e. * and + << not sure if need the ending +
let re = /[\*\+]+/;
let equationToNumberArray = equationString.split(re).map(Number);
let arrayMultiplier = equationToNumberArray.reduce((a, b) => a * b);
console.log(arrayMultiplier);
使用reduce可以使您遍历数组并对每个项目执行计算,同时保持对前一个项目的先前计算。
注意:我对这两种解决方案都不满意的是,即使reduce只需对数组集进行一次数学运算即可。更好的解决方案是编写某种代码来检测操作员,并将其包括在整体解决方案中
这样一来,您就不必使用可怕的eval()
,而且可以保留原始方程式完整无缺的内容,以便以后处理。
答案 4 :(得分:0)
一线:
str.split(/[x*]/).reduce((a,b) => a*b)