首页 > 解决方案 > 输入达到一定长度后,我的计算器循环为什么会失败?

问题描述

我的代码是

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, 1)
      merged.splice(index, 0, 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, 0, multiply)
      } else if (arr[i] === '/') {
        let div = arr[i - 1] / arr[i + 1]
        arr.splice(i - 1, 3)
        arr.splice(i - 1, 0, 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, 0, add)
        } else if (arr[i] === '-') {
          let minus = arr[i - 1] - arr[i + 1]
          arr.splice(i - 1, 3)
          arr.splice(i - 1, 0, minus)
        }
      }
    }
  }
  
  return arr
}

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

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

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

标签: javascriptarraysloopsmathcalculator

解决方案


推荐阅读