javascript - BODMAS 计算器

标签 javascript reactjs algorithm calculator

我正在尝试创建一个遵循 bodmas 规则并首先尝试乘法的计算器。当点击等号按钮时,诸如“4*5+6*7”之类的字符串将存储在 displayValue 中。 作为第一次尝试,我使用 reg ex 在字符串中搜索乘号及其位置。当它找到 lhs 和 rhs 的值并存储它时,它会调用。然后它使用 firstValue、secValue 将这些值相乘,并将 cal 替换为 displayValue 中的结果。这适用于 4*5,但我必须再次按等于才能执行 6*7。我尝试使用 while 循环但无法让它工作。我如何让它一次完成字符串中的所有乘法部分?

  equals() {
      const displayValue = this.state.displayValue.slice(0);
      let counter = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/g).length;
      console.log("counter: " +counter);
      while (counter > 0) {
          let cal = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/).toString().split("*").join(",");
           console.log("cal: " +cal)
           let operPos = cal.search(/\*/);
           let firstValue = parseFloat(cal.slice(0, operPos));
           let secValue = parseFloat(cal.slice(operPos + 1));
           let finalCal = firstValue * secValue;
           let result = displayValue.replace(/[\d\.]+(?=\*)\*[\d\.]+/, finalCal);
           this.setState({displayValue: result});
           counter = counter -1;
           console.log("counterII: " +counter)
       }
     console.log("new display: " +this.state.displayValue)
}

最佳答案

displayValue 没有在每个循环中更新,因为我将它分配为常量变量。这是正确的代码:

equals() {
    let displayValue = this.state.displayValue.slice(0);
    let counter = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/g).length;
    console.log("counter: " +counter);
    while (counter > 0) {
        let cal = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/).toString().split("*").join(",");
        console.log("cal: " +cal)
        let operPos = cal.search(/\*/);
        let firstValue = parseFloat(cal.slice(0, operPos));
        let secValue = parseFloat(cal.slice(operPos + 1));
        let finalCal = firstValue * secValue;
        displayValue = displayValue.replace(/[\d\.]+(?=\*)\*[\d\.]+/, finalCal);
        this.setState({displayValue: displayValue})
        console.log("result: " +displayValue)
        counter = counter -1;
        console.log("counterII: " +counter)
    }
}

如果有人有更好的方法来实现同样的事情,请告诉我。

关于javascript - BODMAS 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467743/

相关文章:

javascript - 当出现带有 Jquery 对话框的邮箱时,asp.net 文本框值为空

javascript - 将 Knockout 与 Typeahead.js 和 Bloodhound.js v0.10 结合使用

javascript - 控制台中的 Mapbox 生产错误。 "Uncaught ReferenceError: y is not defined"

javascript - 如何动态地将每个字段名及其各自的值添加到一个 json 对象中

reactjs - 在 GraphQL/Relay 中处理隐私

algorithm - 模式识别算法/技术

Javascript 和 jQuery 在 https 上不安全

javascript - 如何禁用 Angular 用户界面网格中的客户端排序?

Java - 对象比较算法

algorithm - 根据另一个列表的排序方式对 Dart 中的列表进行排序