Java 脚本 + Node.js 计算器问题

Java Script + Node.js Calculator issue

我是一名 "new" 涉足 Web 开发的开发人员,我遇到了一个问题,我希望 Stack Overflow 上的好人能够帮助我。我在我的 class 中问过几个干部和讲师,我们都被它难住了。

首先,我决定将我的所有代码放在 Gitlab 存储库中,因此如果您想查看整个代码(或者如果您想添加它,请告诉我):Link to Github Repo .我发现你们不希望将整个内容发布为文字墙,而是我特别希望在文件中截取一些内容。但它是相对较小的文件

我正在使用简单的 JavaScript 和 Node.Js 来在后端构建一个工作计算器,我可以将其用作我需要工作的任何其他项目的模板在未来。现在我正试图通过控制台输入内容来让它工作。

我已经为在 Node 中估算的内容和我设置的 imputArray 变量开辟了一条道路,数组如下所示:

 [(command), (num1), (num2), (num3), ...]

我设置了一个开关函数,运行根据给出的命令(加、减、除等)生成一个代码块。以及将命令与数字分开并将它们放入另一个数组中。

我需要帮助的部分是让代码块按照我的意愿工作。我已经很容易地在两个数字上将它设置为 运行,但我希望它能处理我想扔给它的尽可能多的数字。我尝试了各种形式的 for 循环以及 forEach 循环,但我似乎无法让它工作。

 case 'divide':

    for (i = 1; i < numArray.length; i++) { // If any number besides the first is 0 spit out this
        if (numArray[i] === 0) {
            consol.log("You canot divide by zero!");
        }
        else {
            var previousTotal = numArray[0]; //Inital number in array       

            for (i = 1; i < numArray.length; i++) {
                previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
            }
        }

        result = previousTotal // Pushes end total to result
    }

    break;

我已经完成了上述代码的几个不同版本(例如使用 for 循环代替),但这几乎就是我最终得到的。我确信有一种更简单、更明智的方法来做我想做的事情,但如果我知道我不会在这里。

基本上这是我想做的理想事情,但我找不到方法:我想 运行 一小段代码将数字数组的索引减一。在这种情况下,它将前一个数字除以数组中的下一个数字。

所以它只有 运行s 如果数组中有一个以上并且它对前一个数字或数组中最后一个的总数执行函数。

这几乎是唯一阻止我完成这个的事情,所以如果有人能花时间看看我的糟糕代码并帮助它做我想让它做的事情,那就太棒了。

每次外循环迭代时,您的代码都会重置结果,因此它只会等于最后一个上一个 Total 的值。基本上除了最后一个循环之外的每个循环都是无关紧要的。你想将它们添加到结果中吗?如果是这样,你想要:

result += previousTotal

或者,如果您想要一系列答案:

result.push(reviousTotal)

抱歉,不是您想要的 100%。希望这可以帮助!

我假设您希望 divide 命令执行 ((num1/num2)/num3)/...

您 post 编写的代码中存在几个问题,我将 post 一个执行上述操作的版本。您可以检查并比较您的版本以找出您的错误。

  // divide, 10, 2, 5
 case 'divide':
    if (numArray.length < 2) {
        console.log("no numbers in array")
        break;
    }
    // previousTotal starts with 10
    var previousTotal = numArray[1]; 

    // start from the second number which is 2
    for (i = 2; i < numArray.length; i++) {
        if (numArray[i] === 0) {
            console.log("You canot divide by zero!");
        }
        else {
            previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
        }
    }
    result = previousTotal;
    // result will be (10/2)/5 = 1
    break;

您只需要一个循环,如果出现 0,您可能希望停止迭代:

 result = numArray[0]; //no need for another variable

 for (var i = 1; i < numArray.length; i++) { // declare variables!
   if (numArray[i] === 0) {
     console.log("You canot divide by zero!"); // typo...
     break; // exit early
   }       
   result = result / numArray[i];            
 }

当然也可以写得更优雅一点:

 const result = numArray.reduce((a, b) => a / b);
 if(isNaN(result)) {
   console.log("Can't divide by zero!");
 } else {
   console.log(`Result is ${result}`);
 }