所以我有这个问题,如果数组中的值高于输入的值,它应该做一些事情,然后停止循环,不接触数组中的剩余值。以下是到目前为止的代码:
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;
}
});发布于 2018-04-08 20:56:09
使用.some,您可以获得类似于.forEach、map或for循环的迭代功能,但具有通过return执行break的能力。
range.some(function(rangeValue , i) {
if (rangeValue <= enteredValue) {
percentages.push(100);
enteredValue = enteredValue - rangeValue;
return true
}
percentages.push(enteredValue * 100 / (rangeValue));
});
在es6 here中阅读有关.some的更多信息
发布于 2018-04-08 20:48:21
只需使用一个很好的旧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;
}发布于 2018-04-08 21:06:31
其他的答案是完全足够的。但是,我想补充的是,map函数并不是执行迭代的最佳方法。map函数的作用是在数组的每个元素上执行在回调中传递的as参数。然后返回新的数组。因此,当你需要一个数组的变异副本(例如,所有元素乘以10)时,map更有用。
出于您的目的,像常规的For循环这样的其他逻辑将是一个更优雅的解决方案。
https://stackoverflow.com/questions/49717942
复制相似问题