如果条件不满足,减少循环迭代

时间:2018-10-02 19:44:16

标签: javascript jquery

我有以下代码:

for (var i = 0; i < data.status.length; i++) {
    if(data.status[i].isMode == 0) {
        var row = '<tr><td>' + data.status[i].Name + '</td><td>' + data.status[i].Pay + '</td></tr>';
        var row = '<tr><td>' + data.status[i].Name + '</td><td>' + data.status[i].Pay + '</td></tr>';
    }
}

它工作平稳,但是如果data.status.length之前有5个项目,并且2的项目中isMode的值为0,其他值为1,则仍会循环{ {1}}并显示这些值,我只想隐藏那些值,并且由于它们用于金额计算,所以我也不想它们的值也成为总数

这是我的JSON

5

3 个答案:

答案 0 :(得分:1)

如果您希望在找到isMode == 0条件的匹配项后停止循环,请使用break语句

for (var i = 0; i < data.status.length; i++) {
    if(data.status[i].isMode == 0) {
        var row = '<tr><td>' + data.status[i].Name + '</td><td>' + data.status[i].Pay + '</td></tr>';
        break;
    }
}

您还可以使用find方法:

var found = data.status.find(s => s.isMode == 0);
if (found) {
    var row = '<tr><td>' + found.Name + '</td><td>' + found.Pay + '</td></tr>';
}

答案 1 :(得分:1)

根据isMode属性过滤对象数组,然后循环返回结果

var newArray =data.status.filter(function (el) {
    return el.isMode==0;
}
for (var i = 0; i < newArray.length; i++) {
    var row = '<tr><td>' + newArray[i].Name + '</td><td>' + newArray[i].Pay + '</td></tr>';
}

答案 2 :(得分:0)

有两种选择:

  1. 在内部打印您的状态。

    for (var i = 0; i < data.status.length; i++) {
      if(data.status[i].isMode == 0) {
        document.write('<tr><td>' + data.status[i].Name + '</td><td>' + data.status[i].Pay + '</td></tr>');
      }
    }
    
  2. 过滤外部模式并打印。

    data = data.status.filter(e => e.isMode == 0)
    
    for (var i = 0; i < data.status.length; i++) {
      var row = '<tr><td>' + data.status[i].Name + '</td><td>' + data.status[i].Pay + '</td></tr>';
    }