打破地图

时间:2018-04-08 12:43:37

标签: javascript loops dictionary if-statement

所以我有这个问题,如果数组中的值高于输入的值,它应该做一些事情,然后停止循环,不要触摸数组中的剩余值。这里是' s代码到目前为止:

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

5 个答案:

答案 0 :(得分:6)

使用.some,您可以获得与.forEachmapfor循环功能类似的迭代,但能够breakreturn代替。

&#13;
&#13;
range.some(function(rangeValue , i) {
  if (rangeValue <= enteredValue) {
    percentages.push(100);
    enteredValue = enteredValue - rangeValue;
    return true
  }
   percentages.push(enteredValue * 100 / (rangeValue));
});
&#13;
&#13;
&#13;

.some here

中详细了解es6

答案 1 :(得分:3)

只需使用旧的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;
 }

答案 2 :(得分:2)

其他答案完全足够。但是,我想补充一点,map函数不是最适合执行迭代的。 map函数执行的操作是在数组的每个元素的回调中执行as参数。然后返回新数组。因此,当您需要阵列的变异副本时(例如,所有元素乘以10),map更有用。

为了您的目的,像常规for循环这样的其他逻辑将是一个更优雅的解决方案。

答案 3 :(得分:1)

从地图中突破-使用return

    let hasId = false;
    let data = {id:1,title:'some item'}
    let cartArray = [{id:1,quantity:19}];
    if (cartArray.length > 0) {
      cartArray.map(item => {
        if (item.id === data['id']) {
           ++item.quantity;
           hasId = true
           return; // Break out
        }
      })
    
     if(!hasId) {
       cartArray.push(data)
     }
    }

答案 4 :(得分:0)

您可以使用reduce代替mapreduce感知到原始数组中的更改。

let enteredValue = parseInt(event.target.value, 10);

const percentages = range
    .slice(0) // if you don't want to mess up the original array
    .reduce(( percentages, rangeValue, _, rangeCopyArray ) => {
        if ( rangeValue <= enteredValue ) {
            percentages.push(100);
            enteredValue -= rangeValue;
        } else {
            percentages.push( enteredValue * 100 / rangeValue );
            rangeCopyArray.length = 0; // the loop ends here
        }
        return percentages;
    }, [])

或更短,但不太清晰

const percentages = [...range].reduce(({p, eV}, rV, _, arr) => ({
    eV: eV-rV, 
    p: [...p, rV <= eV ? 100 : eV*100/rV + (arr.length = 0)]
}), {p: [], eV: parseInt(event.target.value, 10)} ).p;