突破地图
突破地图
我有一个问题,如果数组中的值高于输入的值,它应该执行某些操作,然后停止循环,并且不要触碰数组中剩余的值。目前的代码如下:
const percentages = []; let enteredValue = parseInt(event.target.value, 10); range.map((rangeValue, i) => { if (rangeValue <= enteredValue) { percentages.push(100); enteredValue = enteredValue - rangeValue; } else { percentages.push(enteredValue * 100 / (rangeValue)); return; } });
(Break out of map)问题的出现原因是在循环中使用了`break`语句,当`enteredValue`小于等于0时,会跳出循环。解决方法是使用其他循环控制语句,如`return`或`continue`来替代`break`语句。
以下是整理后的文章:
使用传统的`for`循环:
const percentages = []; let enteredValue = parseInt(event.target.value, 10); for(const range of ranges) { percentages.push(Math.min(100, (enteredValue / range) * 100)); enteredValue -= range; if(enteredValue <= 0) break; }
以上代码中存在一个(Break out of map)问题。问题的原因是在循环中使用了`break`语句,当`enteredValue`小于等于0时,会跳出循环。为了解决这个问题,我们可以使用其他循环控制语句来替代`break`语句。
在上述代码中,使用了.some
函数来进行迭代操作,与.forEach
、map
或for
循环功能类似,但具备通过return
语句来实现break
的能力。
代码中的.some
函数接受一个回调函数作为参数,该回调函数有两个参数rangeValue
和i
,分别表示数组中的元素和元素的索引。在回调函数中,通过判断rangeValue
是否小于等于enteredValue
来执行不同的操作。如果满足条件,将100
推入percentages
数组,并更新enteredValue
的值为enteredValue - rangeValue
,然后通过return true
来实现break
的效果。如果不满足条件,则将enteredValue * 100 / (rangeValue)
推入percentages
数组。
解决方法是使用.some
函数结合条件判断和返回值的方式来实现循环中的break
功能。通过在满足条件时返回true
来终止循环。
更多关于.some
函数的信息可以在es6
中的这里阅读。