如何解决输入达到一定长度后,计算器循环为什么失败?
我的代码是
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 举报,一经查实,本站将立刻删除。