javascript - 输入达到一定长度后,我的计算器循环为什么会失败?
问题描述
我的代码是
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]
我仍然得到一个数字作为回报,但这是不正确的。关于为什么会这样的任何见解?
此外,我被迫提高文本与代码的比率,因此在计算器功能之前的所有内容都需要随机输入字符串并在可能的情况下进行计算。即数字运算符号。
解决方案
推荐阅读
- git - git push 提交到公关和讨论
- matplotlib - CUDA 加速 Matplotlib
- bash - 循环遍历使用参数指定的目录中的文件
- java - 使用 Java - JSch 通过 SSH 连接到服务器并发出 shell 命令
- elasticsearch - 在 JanusGraph 0.2.1 配置弹性搜索身份验证
- c - C: realloc 对它释放的内存做了什么?
- python-3.x - 切片 H20 框架
- node.js - 如何部署node js web服务器?
- ios - UITableViewDiffableDataSource 的 defaultRowAnimation 不起作用
- android - 没有可用于构建模型的构建器