簡體   English   中英

跳出地圖

[英]Break out of map

所以我有這個問題,如果數組中的值高於輸入的值,它應該做一些事情然后停止循環並且不要觸摸數組中的剩余值..這是到目前為止的代碼:

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

使用.some您可以獲得類似於.forEachmapfor循環的迭代功能,但具有break return的能力。

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

此處閱讀有關.some中的es6更多信息

只需使用一個很好的 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;
 }

其他答案完全足夠。 但是,我想補充一點, map函數不適合用於執行迭代。 map函數所做的是對數組的每個元素執行回調中傳遞的 as 參數。 然后返回新數組 因此,當您需要數組的變異副本(例如,所有元素乘以 10)時,map 更有用。

出於您的目的,其他邏輯(如常規 for 循環)將是更優雅的解決方案。

您可以使用reduce而不是map reduce感知原始數組的變化。

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;

從地圖中突破 - 使用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)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM