for循环中的两个条件

时间:2016-04-21 05:28:30

标签: javascript loops

我有这个代码,它回应了jquery成功的数据。

   for(i = 0;i < dat.id.length; i++){

           // im echoing data here 
    }

我希望检查dat.voteup

中的最高值 像那样(它有效)

    var maxvoteup = 0; 
    if (dat.voteup[i] - dat.votedown[i] ==maxvoteup) {
                    console.log(maxvoteup);
        //i want fetch maxvoteup here

     }

但是我想要只做一个For循环而不是两个。我该怎么办?

编辑:

  var maxvoteup = 0; 
    for (i = 0;i < (dat.voteup-dat.votedown).length ;i++) {
         if (dat.voteup[i] - dat.votedown[i]>maxvoteup) {
            maxvoteup = dat.voteup[i] - dat.votedown[i];
                    console.log(maxvoteup);
        //i want fetch maxvoteup here
      }
     }

EDIT2: 这就是我的jquery响应,但实际上我的最大投票是10而不是8。 8只被投票到8,但还有其他投票是10。

   {"status":"success","message":[],"date_edited":[2016-04-21 21:31:25],"voteup":[],"votedown":[8],"id":[]}

1 个答案:

答案 0 :(得分:1)

您的代码有点难以阅读,但如果我理解正确,我相信您需要做的就是将两者结合到一个外部定义maxvoteup的循环中。

var maxvoteup = 0;
for(i = 0;i < dat.id.length; i++){
    // echo data...

    // max upvote
    if (dat.voteup[i] - dat.votedown[i] == maxvoteup) {
      console.log(maxvoteup);
    }
}

编辑:

不幸的是,从列表中获取最大值需要您遍历列表,即在常量时间内找不到 的最大值。我建议你先找到最大值,然后继续你的for循环。

此外,如果你知道你的最大值是一个数字列表,你实际上可以使用Javascript的apply来使代码更清洁:

var maxvoteup = Math.max.apply(Math, listOfMaxVotes);

见这里:How does the Math.max.apply() work?

EDIT2:

如果您想要持续跟踪最大值,那么您需要做的就是将maxvoteup变量移动到响应处理程序的 之外,这样您就可以随时跟踪。< / p>

// global scope...
var maxvoteup = 0;

// your jquery response handler
var onSuccessData = function(data) {
  // get the highest possible max from the `voteup` and `votedown` lists
  var responseMax = Math.max.apply(Math, data.voteup.concat(data.votedown));

  // check if it's greater than our global maxvoteup
  if (responseMax > maxvoteup) {
    // if it is, then update our global `maxvoteup` to the new value
    maxvoteup = responseMax;
  }

  // continue with your other processing...
};