#javascript
#javascript
Вопрос:
Я пытаюсь нарисовать график на основе калькулятора, и результат уравнения используется в качестве одной из осей, в данном случае Y, чтобы сделать первую точку, а второй входной файл предназначен для оси X, но мне не удается перенести результат в следующую функцию. какие-либо рекомендации или подход?
Вот JS
function parseCalculationString(s) {
var calculation = [],
current = '';
for (var i = 0, ch; ch = s.charAt(i); i ) {
if ('^*/ -'.indexOf(ch) > -1) {
if (current == '' amp;amp; 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>
заранее спасибо
Комментарии:
1. почему возвращаются
calculateButton
в событии? что там внутри?2. чтобы вернуть полученное значение, я имею в виду, что я могу ошибаться, пока он работает с ним.
3.ваш вызов функции 2 раза, я не знаю, почему? внутри
event
parseCalculationString
также внутриremoveBrackets
4. если я удаляю его, то я получаю сообщение об ошибке, оно вводит здесь «console.log(‘Ошибка: нет функции’);»
5. Я понятия не имею, чего вы хотите этим добиться … но если вы посмотрите на это правильно, используя
parseCalculationString
insideremoveBrackets
, а с другой стороны, вы вызываетеremoveBrackets
какparseCalculationString
параметр возврата, это всех смущает.