输入达到一定长度后,计算器循环为什么失败?

问题描述

我的代码是

let firstInput = function(stringy) {

  let array = [...stringy]
  let regex = /[0-9]/;
  let reop = /[*/+-]/;
  let holder = [];
  //console.log(array)
  
  let filter = array.filter(function(x) {
    if (regex.test(x) === true || reop.test(x) === true) {
      return true
    } else null
  })
  
  filter.forEach(function(x) {
    if (regex.test(x) === true) {
      holder.push(parseFloat(x));
    } else {
      holder.push(x)
    }
  })
  
  return holder;
}

let arry = firstInput('8*all[]/3++++++++zzzy^^2-1');
console.log(arry)

let merged = arry.join('').split(/(\d+)/).filter(Boolean).map(x => +x || x);
console.log(merged)

merged.forEach(function(x) {
  if (typeof x === 'string') {
    if (x.length > 1) {
      console.log(x)
      console.log(merged.indexOf(x))
      let index = merged.indexOf(x)
      let replace = x.substring(0,1)
      merged.splice(index,replace)
    }
  }
})

console.log(merged)
let arr = merged;

let calc = function() {

  if (arr.length > 1) {
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] === '*') {
        let multiply = arr[i - 1] * arr[i + 1]
        arr.splice(i - 1,3)
        arr.splice(i - 1,multiply)
      } else if (arr[i] === '/') {
        let div = arr[i - 1] / arr[i + 1]
        arr.splice(i - 1,div)
      }
    }
  }
  
  if (arr.length > 1) {
    for (let i = 0; i < arr.length; i++) {
      if (arr[i] !== '*' || arr[i] !== '/') {
        if (arr[i] === '+') {
          let add = arr[i - 1] + arr[i + 1]
          arr.splice(i - 1,3)
          arr.splice(i - 1,add)
        } else if (arr[i] === '-') {
          let minus = arr[i - 1] - arr[i + 1]
          arr.splice(i - 1,minus)
        }
      }
    }
  }
  
  return arr
}

calc(merged)
console.log(calc())

当前进入calc函数的是这个数组[8,"*",3,"+",2,"-",1] ,我返回25。这是正确的。当我添加诸如[8,1,'+',1] 之类的其他内容时,我仍然会得到一个数字作为返回值,但这是不正确的。为什么会这样?

我还被迫提高文本与代码的比率,因此希望计算器功能之前的所有内容都采用随机输入字符串并在可能的情况下进行计算。即数字运算符号码。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...