Javascript 从数组计算器中筛选数字

Javascript 从数组计算器中筛选数字,javascript,Javascript,我正在构建一个计算器,在输入中有以下数组['1','2','+','5','4',],我想将这些数字过滤到[12',+',54] 我将如何在javascript中实现它 这是我尝试过的,但是这个方法只过滤掉单数,我想要整数 更新:我希望将操作符也保留在数组中。我该如何修改正则表达式呢 let numbers = []; input.forEach(el => { if(!isNaN(parseFloat(el) && !isFinite(parseFloat(el)

我正在构建一个计算器,在输入中有以下数组['1','2','+','5','4',],我想将这些数字过滤到[12',+',54]

我将如何在javascript中实现它

这是我尝试过的,但是这个方法只过滤掉单数,我想要整数

更新:我希望将操作符也保留在数组中。我该如何修改正则表达式呢

let numbers = [];
input.forEach(el => {
    if(!isNaN(parseFloat(el) && !isFinite(parseFloat(el))){
        numbers.push(el);
    }
})

带有任意数量+,-运算符的示例calc解释器已从下面的链接中给出的python转换为JS代码。您可以修改它并生成其余零件。 目前已经

句柄+&操作员支持。 处理输入中的空白。 处理任何数量的输入,如1+2+3-20。。。 处理多位数输入,例如22+35或200+340等 它没有什么

支持*&/ 常量整数='INTEGER' 常量PLUS='PLUS' 常量减号=‘减号’ 常数EOF='EOF' 类令牌{ //类方法 构造函数类型、值{ //令牌类型:整数、加号、减号或EOF this.type=type //标记值:非负整数值“+”、“-”或无 this.value=value } 代币代表{ 返回{type:this.type,value:this.value} } } 类解释器{ 构造器文本{ //客户端字符串输入,例如3+5、12-5等 this.text=文本 //this.pos是此.text的索引 此值为0.pos=0 //当前令牌实例 this.current_令牌= this.current_char=this.text[this.pos] } 错误{ 抛出新错误“错误解析输入”; } 前进{ //前进“pos”指针并设置“current_char”变量。 这是1.pos+=1 如果this.pos>this.text.length-1{ this.current_char=//表示输入结束 }否则{ this.current_char=this.text[this.pos] } } 跳过空白{ whilethis.current\u char!=&this.current\u char==''{ 这是预付款 } } 整数{ //返回从输入中消耗的多位数整数。 让结果= whilethis.current\u char!=&!isNaNthis.current\u char{ 结果+=此.current\u字符 这是预付款 } 返回parseIntresult } 获取下一个令牌{ //词法分析器也称为扫描器或标记器 //这种方法负责打破一个句子 //把它们分成代币。 // 而这个.current_char!={ 如果此.current_char==“”{ 这是空白 持续 } 如果!这是当前字符吗{ 返回新的TokenINTEGER,this.integer } 如果此.current_char=='+'{ 这是预付款 返回新的TokenPLUS,“+” } 如果此.current_char=='-'{ 这是预付款 返回新的标记负“-” } 这是一个错误 } 返回新的TokenEOF,null } EATU类型{ //将当前令牌类型与传递的令牌进行比较 //键入,如果匹配,则吃掉当前令牌 //并将下一个令牌分配给this.current_令牌, //否则将引发异常。 如果this.current\u token.type==token\u type{ this.current\u token=this.get\u next\u token } 否则{ 这是一个错误 } } 术语{ //返回整型标记值。 let token=this.current\u token 这是一个整数 返回token.value } expr{ //解析器/解释器 //expr->整数加整数 //expr->整数减去整数 // //将当前令牌设置为从输入中获取的第一个令牌 this.current\u token=this.get\u next\u token 设result=this.term 而[加号,减号].includesthis.current_token.type{ let token=this.current\u token iftoken.type==PLUS{ 这是eatPLUS 结果=结果+这个术语 }如果token.type==减,则为else{ 这个是 结果=结果-此.term } } 返回结果 } } 让输入='12+54' 解释器=新解释器输入 结果=解释器.expr console.loginput+'='+结果 输入='10+5-30' 解释器=新解释器输入 结果=解释器.expr console.loginput+'='+结果 输入='12+54+600' 解释器=新解释器输入 结果=解释器.expr console.loginput+'='+result您可以将数组合并为单个字符串,然后使用正则表达式拆分任何非数字[^0-9]字符。因为输出将是字符串,所以需要一个.mapn=>+n来将它们转换为整数

常量arr=['1'、'2'、'+'、'5'、'4'、'-'、'8']; const result=arr.join.split/[^0-9]/.mapn=>+n; console.logresult 一种方法是加入并使用match

设arr=['1'、'2'、'+'、'5'、'4'] 让giveMeDigits=arr=>{ 返回arr.join.match/\d+/g.mape=>+e }
console.loggiveMedigitsarry您应该聚合构成数字的连续字符,通常为0,1,2,3,4,5,6,7,8,9。并将聚合字符串解析为单个数字。您可以像这样更新代码:让数字=
[]; 设currentNumber=;input.forEachel=>{if!isnanparseflotel&!isFiniteparseFloatel{currentNumber+=e1}否则{if currentnumbers.pushparseFloatcurrentNumber}if currentnumbers.pushparseFloatcurrentNumber;他可能要求一些更通用的东西,只是解析这个特定数组。。。其他的运算呢,或者小数部分的数字呢?那不是动态的。它只会添加。@Julienbarro使用示例解析器更新代码。您的输出为[12,54],为字符串值,预期为数字,