Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript从字符串执行数学操作_Javascript_Node.js - Fatal编程技术网

使用Javascript从字符串执行数学操作

使用Javascript从字符串执行数学操作,javascript,node.js,Javascript,Node.js,我试图找到一种简单的方法来执行一组javascript数学操作,而不使用eval函数。示例:1+2x3x400+32/2+3,必须遵循PEMDAS数学原理。这就是我所拥有的,但它不起作用 function mdas(equation) { let operations = ["*", "/", "+", "-"]; for (let outerCount = 0; outerCount <

我试图找到一种简单的方法来执行一组javascript数学操作,而不使用eval函数。示例:1+2x3x400+32/2+3,必须遵循PEMDAS数学原理。这就是我所拥有的,但它不起作用

function mdas(equation) {

    let operations = ["*", "/", "+", "-"];

    for (let outerCount = 0; outerCount < operations.length; outerCount++) {
        for (let innerCount = 0; innerCount < equation.length; ) {
            if (equation[innerCount] == operations[outerCount]) {

                let operationResult = runOperation(equation[innerCount - 1], operations[outerCount], equation[innerCount + 1]);

                var leftSideOfEquation = equation.substr(0, equation.indexOf(innerCount - 1));
                var rightSideOfEquation = equation.substr(equation.indexOf(innerCount), equation.length);
                
                var rightSideOfEquation = rightSideOfEquation.replace(rightSideOfEquation[0],String(operationResult));
                equation = leftSideOfEquation + rightSideOfEquation;
                innerCount = 0;
            }
            else {
                innerCount++;
            }
        }
    }
    return "Here is it: " + equation; //result of the equation
}

这有点老套,但你可以试试这样:

变量方程=[ '1+2*3*4+1+1+3', '1+2*3*400+32/2+3', '-5+2', '3*-2', ]; 公式{console.logmdaseqs[eq];}中的forvar eq 函数方程{ 对数方程; var故障保护=100;
var num='?有点粗糙,但您可以尝试以下方法:

变量方程=[ '1+2*3*4+1+1+3', '1+2*3*400+32/2+3', '-5+2', '3*-2', ]; 公式{console.logmdaseqs[eq];}中的forvar eq 函数方程{ 对数方程; var故障保护=100;
var num='?如果您不想使用像-这样的完整库,也不想创建自己的脚本,这将涉及:词法分析、标记化、语法分析、递归树解析、编译和输出。。。 最简单的陈词滥调是:

const calc=s=>Function`return${s}`; console.log calc1+2*3*400+32/2+3;//2420 console.log calc-3*-2;//6 console.log计算-3*+1;//-3 console.log计算-3+-1;//-4
console.log calc2*3+1;//8如果您不想使用像-这样的完整库,也不想创建自己的脚本,其中包括:词法分析、标记化、语法分析、递归树解析、编译和输出。。。 最简单的陈词滥调是:

const calc=s=>Function`return${s}`; console.log calc1+2*3*400+32/2+3;//2420 console.log calc-3*-2;//6 console.log计算-3*+1;//-3 console.log计算-3+-1;//-4
console.log calc2*3+1;//8您能描述一些代码不能正常工作的示例吗?@kylejrp当前示例不起作用,使用像1+2*3*4+1+1+3这样简单的东西也不起作用。您能描述一些代码不能正常工作的示例吗?@kylejrp当前示例不起作用,使用像1+2*3*4+1+1+3这样简单的东西是不存在的work@Nation:我可能可以处理正则表达式中具有正后视的运算符后的负数,但考虑到这有多干净,我不知道这有什么意义。看起来不错吗?@chrisslickle,正则表达式实际上很简单。我也在尝试一下……为了好玩……会不会updatesoon@RokoC.Buljan这太棒了!我真的很好地理解了简单数学背后的科学原理,以及我们如何使用编程语言来实现它的基本计算。两个答案都很好,并且展示了解决问题的不同创新方式。@Nation编写复杂代码成了一门艺术。很好。@Nation:我可以可能在正则表达式中使用正后视运算符后处理负数,但考虑到这有多干净,我不知道有什么意义。看起来不错吗?@chriss,正则表达式实际上很简单。我也在尝试一下……为了好玩……会更新的soon@RokoC.Buljan这太棒了!我真的很好理解d简单数学运算背后的科学,以及我们如何使用编程语言来实现其基本计算。这两个答案都很好,并展示了解决问题的不同创新方式。@编写复杂代码成为一门艺术。很好。评论不用于扩展讨论;本次对话是。评论不适合进行长时间的讨论;此对话已结束。