programing

TypeScript에서 각 루프를 끊는 방법

firstcheck 2023. 8. 21. 23:34
반응형

TypeScript에서 각 루프를 끊는 방법

저는 아래 코드를 가지고 있는데, 특정 조건에서는 루프를 해제할 수 없습니다.

function isVoteTally(): boolean {
  let count = false;
  this.tab.committee.ratings.forEach((element) => {
    const _fo = this.isEmptyOrNull(element.ratings.finalOutcome.finaloutlook);
    const _foreign = this.isEmptyOrNull(element.ratings.finalOutcome.foreign);
    const _local = this.isEmptyOrNull(element.ratings.finalOutcome.local);
    const _tally =
      element.ratings.finalOutcome.voteTally.maj +
      element.ratings.finalOutcome.voteTally.dis;

    if (_fo == false && _foreign == false && _local == false) {
      if (_tally > 0) {
        return (count = false); // ⭐
      }
    } else {
      if (_tally < 0) {
        return (count = false); // ⭐
      }
    }
  });
  return count;
}

별이 표시된 영역에서는 코드를 끊고 부울 값을 반환하고 싶지만 그럴 수 없습니다.어떻게 할 수 있습니까?

this.tab.committee.ratings.forEach연산자가 아닙니다.

타이프스크립트를 사용하면 훨씬 더 읽기 쉬운 코드를 사용할 수 있습니다.

사용for다음과 같은 스타일의 루프:

for (let a of this.tab.committee.ratings) {
   if (something_wrong) break;
}

p.s. Angular에서 "jQuery와 동일한 코딩"을 잊어버립니다.그것은 단지 작동하지 않습니다.

에서 벗어날 수 없습니다.forEach()보통.

또는 Array.every()사용할 수 있습니다. 반환을 원하기 때문입니다.false고리를 끊는 동안.

true를 반환하려면 Array.some()사용하면 됩니다.

this.tab.committee.ratings.every(element => {

  const _fo = this.isEmptyOrNull(element.ratings.finalOutcome.finaloutlook);
  const _foreign = this.isEmptyOrNull(element.ratings.finalOutcome.foreign);
  const _local = this.isEmptyOrNull(element.ratings.finalOutcome.local);
  const _tally = element.ratings.finalOutcome.voteTally.maj + element.ratings.finalOutcome.voteTally.dis;

  if (_fo == false && _foreign == false && _local == false) {
    if (_tally > 0) {
      **return count = false;**
    }
  } else {
    if (_tally < 0) {
      **return count = false;**
    }
  }
});

중단 명령어가 기술적으로 루프에 있지 않기 때문에 '중단'할 수도 없고 실행되지도 않습니다.해결책?루프는 보통을 사용합니다.아무도 당신을 비웃지 않을 것입니다.

저는 더 나은 해결책은 사용하는 것이라고 생각합니다.With for는 값이 발견되면 반환하고 루프를 해제할 수 있습니다.훨씬 더 깨끗한 솔루션입니다.

for (element of this.tab.committee.ratings) {
// and here you use your element, when you return a values it stops the cycle

if (element === something){
 return element;
 }
}

const blocks = document.querySelectorAll('.block');
var breakMe = false;

blocks.forEach((block, i) => {
    if(breakMe == false) {
        /*code that you want*/ 
        if(i < 2) {
            block.style.background = 'red';
        } else if(i != 4) {
            block.style.background = 'blue';
        } else if(i == 4) {
            breakMe = true;
            /*change breackMe to true if you want to breack forEach*/
        }
    }

})
<!DOCTYPE html>
  <html lang="en">
  <body>
    <div id="container">
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>      
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
      <div class="block" style="width: 200px; height: 200px; background: purple; margin: 50px"></div>
    </div>
  </body>
  </html>

try-catch 문을 사용하여 각 루프에 대해 브레이크할 수 있습니다.

try {
  arr.forEach((item:any) => {
    if(item === '2') {
      throw "break";
    }
    console.log('Item ID: ', item);
  });  
} catch(e) {
  console.log('Warn Error',e);
}

간단하게return false;깨질 거예요.

언급URL : https://stackoverflow.com/questions/51747397/how-to-break-foreach-loop-in-typescript

반응형