问题描述
我的代码是
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 (将#修改为@)