简体   繁体   English

有条件地中断或退出reactjs中的循环

[英]conditional break or exit a loop in reactjs

In my source code I want to break nested loops based on some condition is met. 在我的源代码中,我想根据满足的某些条件打破嵌套循环。 I have used return and break but does not work. 我已经使用了返回和中断功能,但是没有用。 Even for break I get build error. 即使是休息,我也会遇到构建错误。 Can someone help me. 有人能帮我吗。 My code is given below: 我的代码如下:

updateUserData(event,id){
    alert(id);
    var elementName=event.target.name;
    alert('element name = '+elementName);
    var userData=this.state.user_data;
    var found=false;
    userData.sports.map(function(sport){
      sport.ticket_detail.map(function(ticket){
        alert(ticket.id);
        if(ticket.id==id){
          alert('matched');
          ticket.ticket.map(function(element){
            alert(element.paramname)
            var str1 = element.paramname;
            var str2 = event.target.name;
            if(element.paramname==event.target.name){
                alert('sport = '+sport.name+' category = '+ticket.cat+' id = '+ticket.id+' paramname = '+element.paramname);
                element.value='hitesh';
                found=true;
                return;
            }
          })
        }
          if(found){
            alert('found1');
            return;
          }
      })
      if(found){
        alert('found2');
        return;
      }
    })
    console.log('updated='+JSON.stringify(userData));
    this.setState({user_data:userData});
  }

It seems you do not intend to map any values. 似乎您不打算映射任何值。 So just go for a simple for-loop instead like this: 因此,只需进行一个简单的for循环,而不是像这样:

updateUserData(event,id){
    alert(id);
    var elementName=event.target.name;
    alert('element name = '+elementName);
    var userData=this.state.user_data;

    for(let sport in userData.sports){
        for(let ticket in sport.ticket_detail){
            alert(ticket.id);
            if(ticket.id==id){
                alert('matched');
                for(let element in ticket.ticket){
                    alert(element.paramname);
                    var str1 = element.paramname;
                    var str2 = event.target.name;
                    if(element.paramname==event.target.name){
                        alert('sport = '+sport.name+' category = '+ticket.cat+' id = '+ticket.id+' paramname = '+element.paramname);
                        element.value='hitesh';
                        console.log('updated='+JSON.stringify(userData));
                        this.setState({user_data:userData});
                        return;
                    }
                }
            }
        }
    }
}

Or you could use Array.prototype.some to test whether at least one element in the array passes the test implemented by the provided function. 或者,您可以使用Array.prototype.some来测试数组中的至少一个元素是否通过了由提供的函数实现的测试。

I am getting this error if I run your code as it is ncaught ReferenceError: sport is not defined at RegisterWindow.updateUserData (index.js:51705) If I add var like this (var sport in userData.sports) then I skip that error but then alert(sport.name); 如果由于错误而运行您的代码,则会出现此错误ReferenceError:在RegisterWindow.updateUserData(index.js:51705)上未定义Sport(运动)未在此添加var(在userData.sports中为var sport),然后跳过该错误但是然后是alert(sport.name); produces undefined . 产生undefined。

JSON is JSON是
{"total_tickets":3,"total_amount":2124,"htmlid_counter":3,"sports":[{"name":"Badminton","ticket_detail":[{"cat":"Men Singles","formid":102,"ticket":[{"label":"Name:","paramname":"name","type":"text","value":""},{"label":"Email:","paramname":"email","type":"text","value":""},{"label":"Phone:","paramname":"phone","type":"text","value":""}],"id":0},{"cat":"Men Singles","formid":102,"ticket":[{"label":"Name:","paramname":"name","type":"text","value":""},{"label":"Email:","paramname":"email","type":"text","value":""},{"label":"Phone:","paramname":"phone","type":"text","value":""}],"id":1},{"cat":"Men Singles","formid":102,"ticket":[{"label":"Name:","paramname":"name","type":"text","value":""},{"label":"Email:","paramname":"email","type":"text","value":""},{"label":"Phone:","paramname":"phone","type":"text","value":""}],"id":2}]},{"name":"Carrom","ticket_detail":[]}],"tournament_id":1}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM