请教这段JavaScript代码的含义,重点是while循环内的除法逻辑
这段while循环代码的逻辑解析
这段代码是优先处理表达式里所有除法运算的逻辑(对应四则运算中乘除优先级高于加减的规则),拆解如下:
逐行解释while循环内的代码
var divide = operators.indexOf("÷");
先定位数组里第一个÷运算符的索引位置,找不到就返回-1。while (divide != -1) { ... }
只要数组里还有未处理的÷(即divide不等于-1),就重复执行循环内的计算逻辑,直到所有除法都处理完毕。numbers.splice(divide, 2, numbers[divide] / numbers[divide + 1]);
这是核心计算步骤:numbers[divide]是除法运算符左边的数字,numbers[divide + 1]是右边的数字,numbers[divide] / numbers[divide + 1]就是执行这两个数的除法计算。splice方法的作用是:从numbers数组的divide位置开始,删掉2个元素(也就是左右两个待除的数),然后把除法计算的结果插入到这个位置。这样numbers数组的长度会减少1,原本的两个数被替换成了除法结果。
operators.splice(divide, 1);
把已经处理完成的那个÷运算符从operators数组里移除,因为对应的两个数已经计算完成,不需要再保留这个运算符。divide = operators.indexOf("÷");
重新查找数组里下一个÷的位置,继续循环处理,直到找不到÷(返回-1),循环结束。
实际例子演示
假设inputString是"12÷3+5÷2":
- 初始状态:
numbers = ["12","3","5","2"],operators = ["÷","+","÷"] - 第一次循环:找到索引0的
÷,计算12/3=4,numbers变为[4,"5","2"],operators变为["+","÷"] - 第二次循环:找到索引1的
÷,计算5/2=2.5,numbers变为[4,2.5],operators变为["+"] - 再次查找
÷返回-1,循环结束,后续可处理剩下的加法运算。
内容的提问来源于stack exchange,提问作者yeet
相关产品推荐
相关产品推荐

