突破地图

16 浏览
0 Comments

突破地图

我有一个问题,如果数组中的值高于输入的值,它应该执行某些操作,然后停止循环,并且不要触碰数组中剩余的值。目前的代码如下:

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;
  }
});

0
0 Comments

(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`语句。

0
0 Comments

问题出现的原因是使用了不适合进行迭代的map函数。map函数的作用是对数组的每个元素执行传入的回调函数,并返回新的数组。所以当需要对数组进行变异的拷贝时,map函数会更有用(例如,将数组的所有元素乘以10)。

解决方法是使用其他逻辑,比如常规的for循环,这样会更加优雅。

0
0 Comments

在上述代码中,使用了.some函数来进行迭代操作,与.forEachmapfor循环功能类似,但具备通过return语句来实现break的能力。

代码中的.some函数接受一个回调函数作为参数,该回调函数有两个参数rangeValuei,分别表示数组中的元素和元素的索引。在回调函数中,通过判断rangeValue是否小于等于enteredValue来执行不同的操作。如果满足条件,将100推入percentages数组,并更新enteredValue的值为enteredValue - rangeValue,然后通过return true来实现break的效果。如果不满足条件,则将enteredValue * 100 / (rangeValue)推入percentages数组。

解决方法是使用.some函数结合条件判断和返回值的方式来实现循环中的break功能。通过在满足条件时返回true来终止循环。

更多关于.some函数的信息可以在es6中的这里阅读。

0