programing

루프용 자바스크립트를 중지하는 방법?

closeapi 2023. 9. 28. 08:24
반응형

루프용 자바스크립트를 중지하는 방법?

배열을 반복하고 일치하는 배열 요소를 찾기 위해 이 자바스크립트를 사용하고 있습니다.

var remSize = [], 
    szString, remData, remIndex, i;

for (i = 0; i < remSize.length; i++) {      
    // I'm looking for the index i, when the condition is true
    remSize[i].size == remData.size ? remIndex = i : remIndex = -1;     
}

배열에는 다음과 같은 "크기"가 들어 있습니다.["34", "36", "38"...].

remData.size제가 찾는 "사이즈"(예: "36")입니다.

인덱스를 반환해야 합니다.i만약 내가 찾고 있는 사이즈가 인덱스에 있다면요.그렇지 않으면 다시 돌아와야 합니다.-1. 더 좋은 방법이 없을까요?

정지하기for자바스크립트의 초기 루프는 다음을 사용합니다.

var remSize = [], 
    szString,
    remData,
    remIndex,
    i;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // Set a default if we don't find it
for (i = 0; i < remSize.length; i++) {      
     // I'm looking for the index i, when the condition is true
     if (remSize[i].size === remData.size) {
          remIndex = i;
          break;       // <=== breaks out of the loop early
     }
}

ES2015(일명 ES6) 환경에 있는 경우 이 특정 사용 사례에 대해ArrayfindIndex(엔트리의 색인을 찾으려면) 또는find(항목 자체를 찾으려면), 두 항목 모두 쉬밍/폴리밍할 수 있습니다.

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = remSize.findIndex(function(entry) {
     return entry.size === remData.size;
});

find콜백이 처음으로 참값을 반환할 때 중지합니다. 콜백이 ( )에 대해 참값을 반환한 요소를 반환합니다.undefined콜백이 truth 값을 반환하지 않을 경우):

var remSize = [], 
    szString,
    remData,
    remEntry;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remEntry = remSize.find(function(entry) {
     return entry.size === remData.size;
});

findIndex콜백이 처음으로 truth 값을 반환할 때 중지하고 요소 대신 요소의 인덱스를 반환합니다. 를 반환합니다.-1콜백이 truth 값을 반환하지 않는 경우.

ES5 호환 환경(또는 ES5 shim)을 사용하는 경우 어레이에서 새로운 기능을 사용하면 콜백이 참값을 반환할 때까지 콜백을 호출할 수 있습니다.

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // <== Set a default if we don't find it
remSize.some(function(entry, index) {
    if (entry.size === remData.size) {
        remIndex = index;
        return true; // <== Equivalent of break for `Array#some`
    }
});

jQuery를 사용하는 경우 배열을 순환하는 데 사용할 수 있으며 다음과 같습니다.

var remSize = [], 
    szString,
    remData,
    remIndex;

/* ...I assume there's code here putting entries in `remSize` and assigning something to `remData`... */

remIndex = -1; // <== Set a default if we don't find it
jQuery.each(remSize, function(index, entry) {
    if (entry.size === remData.size) {
        remIndex = index;
        return false; // <== Equivalent of break for jQuery.each
    }
});

대신 ES2015 릴리스의 일부인 for of loop을 사용합니다.각의 경우와 달리 리턴, 브레이크 및 계속 사용할 수 있습니다.https://hacks.mozilla.org/2015/04/es6-in-depth-iterators-and-the-for-of-loop/ 참조

let arr = [1,2,3,4,5];
for (let ele of arr) {
  if (ele > 3) break;
  console.log(ele);
}

논리가 올바르지 않습니다.배열의 마지막 요소의 결과를 항상 반환합니다.

remIndex = -1;

for (i = 0; i < remSize.length; i++) {      
    if (remSize[i].size == remData.size) {
        remIndex = i
        break;
    }
}

이것이 좀 오래된 것은 알지만, for 루프로 배열을 순환하는 대신 방법을 사용하는 것이 훨씬 더 쉬울 것입니다.<array>.indexOf(<element>[, fromIndex])

배열을 통해 루프를 형성하여 값의 첫 번째 인덱스를 찾고 반환합니다.값이 배열에 포함되어 있지 않으면 -1을 반환합니다.

<array>확인할 수 있는 배열입니다.<element>당신이 찾고 있는 가치입니다.[fromIndex]는 (defaults부터 0까지) 시작하는 지수입니다.

코드 크기를 줄이는데 도움이 되었으면 좋겠습니다!

사용할 수도 있습니다.every자바스크립트의 메소드.조건이 참이 아닐 때 실행을 중지합니다.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

remIndex = -1;

remSize.every((rem, index) => {
  if (rem.size == remData.size) {
        remIndex = i
        return false
  }
  return true
})

언급URL : https://stackoverflow.com/questions/9830650/how-to-stop-a-javascript-for-loop

반응형