programing

각각 Javascript를 중지하는 방법

nicescript 2022. 12. 9. 22:07
반응형

각각 Javascript를 중지하는 방법

와 Mongoose를와 Node.js Mongoose가 된 딥 .재귀 함수와 함께 중첩된 상세 댓글에서 특정 코멘트를 찾으려고 합니다.forEachjs Node.js를 정지하는 있습니까?forEach가 ★★★★★★★★★★★★★★★★★★★★★★★★★★.forEach 할 수 .break,만.return으로 그치지 않을 forEach.

function recurs(comment) {
    comment.comments.forEach(function(elem) {

        recurs(elem);

        //if(...) break;

    });
}

에서는 벗어날 수 없습니다.forEach가짜로 만들 수 있는 방법은 세 가지가 있습니다.

1. 추악한 방법: 두 번째 인수를 전달합니다.forEach콘텍스트로 사용하고, 거기에 부울을 저장한 후,if이건 끔찍해 보여

2. 논쟁의 여지가 있는 방법: 모든 것을 하나의 방법으로 둘러쌉니다.try-catch차단 및 예외 발생 시 차단하고 싶을 때는 예외로 합니다.이것은 매우 나빠 보여 퍼포먼스에 영향을 줄 수 있지만 캡슐화할 수 있습니다.

3. Fun Way: 사용.

['a', 'b', 'c'].every(function(element, index) {
  // Do your thing, then:
  if (you_want_to_break) return false
  else return true
})

대신 사용할 수 있습니다.return true

Array #forEwhere를 분리하는 것은 불가능합니다.(링크된 페이지에서 Firefox에 구현되어 있는 소스 코드를 조사하여 확인할 수 있습니다.)

.for 디세이블로그:

function recurs(comment) {
    for (var i = 0; i < comment.comments.length; ++i) {
        var subComment = comment.comments[i];
        recurs(subComment);
        if (...) {
            break;
        }
    }
}

더 와 (좀 더 똑똑해지고 싶다면)comment.comments[i]는 항상 오브젝트입니다.

function recurs(comment) {
    for (var i = 0, subComment; subComment = comment.comments[i]; ++i) {
        recurs(subComment);
        if (...) {
            break;
        }
    }
}

시 에 이 것이 이 작업을 사용하는 .Array.prototype.some ★★★★★★★★★★★★★★★★★」Array.prototype.every

var ar = [1,2,3,4,5];

ar.some(function(item,index){
  if(item == 3){
     return true;
  }
  console.log("item is :"+item+" index is : "+index);
});

경우에 따라서는 아마 요건을 충족시킬 것이다.

처럼 ', 하다, 하다, 하다'는 취소할 수 .forEach을 사용하다

ary.forEach(function loop(){
    if(loop.stop){ return; }

    if(condition){ loop.stop = true; }
});

물론 이것은 실제로 루프를 끊는 것이 아니라 "break" 뒤에 오는 모든 요소에 대한 코드 실행을 방해할 뿐입니다.

Array.protype을 사용하고 싶은 것 같습니다.[검색(Find)]를 선택하면 어레이에서 특정 값이 발견되면 자동으로 중단됩니다.

var inventory = [
  {name: 'apples', quantity: 2},
  {name: 'bananas', quantity: 0},
  {name: 'cherries', quantity: 5}
];

function findCherries(fruit) { 
  return fruit.name === 'cherries';
}

console.log(inventory.find(findCherries)); 
// { name: 'cherries', quantity: 5 }

서드파티 라이브러리를 이용해도 괜찮으시다면 Lodash의 기능을 이용하실 수 있습니다.

예:

var _ = require('lodash');

_.forEach(comments, function (comment) {
    do_something_with(comment);

    if (...) {
        return false;     // Exits the loop.
    }
})
    var f = "how to stop Javascript forEach?".split(' ');
    f.forEach(function (a,b){
        console.info(b+1);
        if (a == 'stop') {
            console.warn("\tposition: \'stop\'["+(b+1)+"] \r\n\tall length: " + (f.length)); 
            f.length = 0; //<--!!!
        }
    });

Array.forEach 않고 try...catch또는 다음과 같은 진부한 방법Array.every ★★★★★★★★★★★★★★★★★」Array.some이치노에 대한 은 두 .

하다 1) 옛것을 사용하다forloop:이 높은 코드 큰에서 자주 수 있습니다.loop: " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "

var testArray = ['a', 'b', 'c'];
for (var key = 0; key < testArray.length; key++) {
    var value = testArray[key];
    console.log(key); // This is the key;
    console.log(value); // This is the value;
}

2) 호환성에 문제가 없는 경우 새로운 ECMA6(2015 사양)를 사용합니다.2016년에도 일부 브라우저와 IDE만 이 새로운 사양을 잘 지원합니다.이 방법은 반복 가능한 개체(예: 어레이)에 대해 작동하지만 반복 불가능한 개체에서 사용하려면Object.entries방법.이 방법은 2016년 6월 18일 현재 거의 사용할 수 없으며 Chrome에서도 이를 사용하려면 특수 플래그가 필요합니다.chrome://flags/#enable-javascript-harmony어레이의 경우 이 모든 것이 필요한 것은 아니지만 호환성은 여전히 문제가 됩니다.

var testArray = ['a', 'b', 'c'];
for (let [key, value] of testArray.entries()) {
    console.log(key); // This is the key;
    console.log(value); // This is the value;
}

3) 많은 사람들이 첫 번째 선택지도 두 번째 선택지도 좋은 후보가 아니라고 동의할 것입니다.옵션 2가 새로운 표준이 될 때까지 Angular와 같은 가장 일반적인 라이브러리는JS와 jQuery는 JavaScript에서 사용할 수 있는 어떤 것보다도 뛰어난 자체 루프 메서드를 제공합니다.또, 이러한 큰 라이브러리를 사용하고 있지 않고, 경량 옵션을 요구하고 있는 유저에게는, 이러한 솔루션을 사용할 수 있어 구식 브라우저와의 호환성을 유지하면서, ECMA6와 거의 동등하게 됩니다.

다음 코드는 조건이 충족되면 foreach 루프를 차단합니다.다음은 예를 제시하겠습니다.

    var array = [1,2,3,4,5];
    var newArray = array.slice(0,array.length);
    array.forEach(function(item,index){
        //your breaking condition goes here example checking for value 2
        if(item == 2){
            array.length = array.indexOf(item);
        }

    })
    array = newArray;

Array 메서드를 덮어쓰면 forEach 루프에서 분리할 수 있습니다.

(function(){
    window.broken = false;

        Array.prototype.forEach = function(cb, thisArg) {
            var newCb = new Function("with({_break: function(){window.broken = true;}}){("+cb.replace(/break/g, "_break()")+"(arguments[0], arguments[1], arguments[2]));}");
            this.some(function(item, index, array){
                 newCb(item, index, array);
                 return window.broken;
            }, thisArg);
            window.broken = false;
        }

}())

예:

[1,2,3].forEach("function(x){\
    if (x == 2) break;\
    console.log(x)\
}")

유감스럽게도 이 솔루션에서는 콜백 내에서 통상적인 브레이크는 사용할 수 없습니다.비활성화된 코드를 문자열로 감싸야 하며 네이티브 함수는 직접 동작하지 않습니다(단, 이 문제를 해결할 수 있습니다).

해피브레이킹!

단순 반품을 사용하지 않는가?

function recurs(comment){
comment.comments.forEach(function(elem){
    recurs(elem);
    if(...) return;
});

'접속' 기능에서 복귀합니다.이렇게 써요.단, 이 예에서는 각 기능에 대해서는 중단되지 않지만 전체 기능에 대해서는 이 간단한 예에서는 동작할 수 있습니다.

jQuery가 제공하는 것은each()메서드, 없음forEach()넌 탈옥할 수 있어each되돌림으로써false.forEach()ECMA-262 규격의 일부입니다. 제가 아는 한, 이 기준을 벗어나는 유일한 방법은 예외를 두는 것입니다.

function recurs(comment) {
  try {
    comment.comments.forEach(function(elem) {
      recurs(elem);
      if (...) throw "done";
    });
  } catch (e) { if (e != "done") throw e; }
}

못생겼지만 할 수 있어

언급URL : https://stackoverflow.com/questions/6260756/how-to-stop-javascript-foreach

반응형