首页 > 解决方案 > 将值传递给变量 JS

问题描述

我正在尝试基于计算器绘制图形,在这种情况下,方程的结果用作轴之一,以制作第一个点,第二个输入文件用于 X 轴,但我无法管理将结果带入下一个函数。有什么建议或方法吗?

这是JS

function parseCalculationString(s) {
    var calculation = [],
        current = '';
    for (var i = 0, ch; ch = s.charAt(i); i++) {
        if ('^*/+-'.indexOf(ch) > -1) {
            if (current == '' && ch == '-') {
                current = '-';
            } else {
                calculation.push(parseFloat(current), ch);
                current = '';
            }
        } else {
            current += s.charAt(i);
        }
    }
    if (current != '') {
        calculation.push(parseFloat(current));
    }
    return calculation;
}

function removeBrackets(s) {
    let regEx = /\((.*?)\)/g;
    let ops = s.match(regEx);

    for (var i = 0; i < ops.length; i++) {
        let op = ops[i];

        let res = calculate(parseCalculationString(op.replace('(', '').replace(')', '')));
        s = s.replace(op, res);
    }
    return s;
}

function calculate(calc) {
    var ops = [
        {
            '^': function(a, b) {
                return Math.pow(a, b);
            }
        }, {
            '*': function(a, b) {
                return a * b
            },

            '/': function(a, b) {
                return a / b
            },
        }, {
            '+': function(a, b) {
                return a + b
            },

            '-': function(a, b) {
                return a - b
            }
        }],
        newCalc = [],
        currentOp;
    for (var i = 0; i < ops.length; i++) {
        for (var j = 0; j < calc.length; j++) {
            if (ops[i][calc[j]]) {
                currentOp = ops[i][calc[j]];
            } else if (currentOp) {
                newCalc[newCalc.length - 1] = currentOp(newCalc[newCalc.length - 1], calc[j]);
                currentOp = null;
            } else {
                newCalc.push(calc[j]);
            }
            console.log(newCalc);
        }
        calc = newCalc;
        newCalc = [];
    }
    if (calc.length > 1) {
        console.log('Error: no funciona');
        return calc;
    } else {
        return calc[0];
    }
}

var calculateButton = document.getElementById('calculate'),
    userInput = document.getElementById('userInput'),
    sustuir = document.getElementById('userInputX'),
    result = document.getElementById('result');

calculateButton.addEventListener('click', function() {

    result.innerHTML = "la respuesta de Y " + calculate(
        parseCalculationString(removeBrackets(
            (userInput.value)
        ))

    );

    return calculateButton;
});

window.onload = function() {
    var dps = []; //dataPoints. 

    var chart = new CanvasJS.Chart("chartContainer", {
        title: {
            text: "Result"
        },
        data: [{
            type: "line",
            dataPoints: dps
        }]
    });

    function addDataPointsAndRender() {
        xValue = Number(document.getElementById("result").value);
        yValue = Number(document.getElementById("userInputX").value);
        dps.push({
            x: xValue,
            y: yValue
        });
        chart.render();
    }
    var renderButton = document.getElementById("calculate");
    renderButton.addEventListener("click", addDataPointsAndRender);
}

这是HTML

<div class="container">
    <h1>Test Part 1 </h1>
    <p>Example 2x*(2+2) use * in input before parentheses in order to work properly.</p>
    <input type="text" id="userInput" />
    <input type="text" id="userInputX" />
    <input type="button" value="Calculate" id="calculate" />
    <div id="result"></div>
    <div id="chartContainer" style="height: 270px; width: 100%;"></div>
</div>

提前致谢

标签: javascript

解决方案


推荐阅读