大家好!
我有这个想法,但还没有达到实现的地步。我想在一个介绍性的行中制作一个计算器,屏幕截图中的一个示例。
我开始写一些东西,但我面临的事实是我根本不明白如何在一行中处理符号和数字。起初看起来很简单,将其分散在数组中(从符号中筛选出数字),但即使在这里我也无法完成这个想法。这是一个例子(2 + 2),我很快就解决了所有问题,但困难是如果我突然想添加的不是 2 个数字,而是一个复杂的例子,(2 + 2 * 5 / 2)
这是到目前为止我们所得到的:
let btn = document.getElementById('button');
let inpt = document.getElementById('input');
let res = document.getElementById('result');
function math(e) {
let arr = String(e).split(' ');
arr.forEach((element, index) => {
if (element == '-' || element == '+' || element == '/' || element == '*') {
//res.innerHTML += element + ' (' + index + ') ';
const arrSum = [element];
} else {
const arrNumber = [element];
//res.innerHTML += element + ' (' + index + ') ';
};
//res.innerHTML += " (" + element + " | " + index + ") ";
});
//res.innerHTML = a;
};
btn.onclick = function() {
if (inpt.value !== '') {
//const i = String(inpt.value).split(' ');
math(inpt.value);
} else {
res.innerHTML = 'Поле не может быть пустым';
}
};
我请教知道的人帮忙。

事实上,这是一个很好的算法问题,我个人建议你尝试自己解决。
解决方案
1)
eval这是一个非常糟糕的选择,最好不要在浏览器中使用它,但是 JS 允许您使用以下方式在行内执行代码
eval:例如,
eval您可以在此处阅读有关问题的信息对于那些知道什么
eval不能直接使用的狡猾的人来说,有一个类似的方法new Function:2)算法
“正确”的算法解决方案可能如下所示:
一个粗略的想法是:
让我们用一个例子来逐个字符地看它
2+2*(74/(32+5)):2- 添加到数字堆栈中+,添加到运营商*因为它的优先级高于前一个(+),我们将其添加到运算符中。(并将其添加到运算符中:7,然后他们看到4,他们一起收到74,并将其添加到操作数中:/它的运算符比括号的运算符要高(在括号处0),所以我们将它添加到运算符中(,将其添加到运算符中:3、进一步2、收到32、添加到操作数+,添加到运算符5并添加到操作数中:6作为答案返回。我希望算法是清楚的。
如果我们以不同的顺序看到操作,例如:
3*6+4它会是这样的:*:+。因为运算符+,优先级低于*,我们执行前面的操作,+直到它们的优先级变低(+下面只有括号):4并添加到操作数中:他们返回的答案是22。
这是按如下方式完成的。我们正在寻找python 中的现成代码,将其上传到codeconvert.ai。、 、
filter中的生成器有时转换不正确,但由于它们不在这里,我们可以认为自己很幸运reducemap