我有这个代码,它回应了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":[]}
答案 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...
};