我正在使用API来生成平均花费在访问网页上的时间,然后将所有返回值的总和除以API中设置的天数。
let avgtime = 0;
for (i in data) {
if (data[i].avg_time_on_site) {
avgtime += data[i].avg_time_on_site;
}
}
$("#avgtime").html(avgtime / datePeriod);
而
datePeriod
是API返回的总天数。例如,如果datePeriod
设置为30,它将返回avgtime
的最近30天。avgtime += data[i].avg_time_on_site;
的摘录从JSON中返回所有avg_time_on_site
作为总和,并除以datePeriod
以获得设置的天数$("#avgtime").html(avgtime / datePeriod);
中的平均值。但是,我的问题是,这仅在网页每天都有返回值的情况下才有效。如果无法在一天之内访问该网页,如下面的示例JSON所示,
avgtime
将是不正确的,因为它将所有返回值的总和除以总天数,而不是有行的总天数。{
"2017-12-30":[],
"2017-12-31":{
"nb_uniq_visitors":1,
"nb_visits":1,
"avg_time_on_site":41,
},
"2018-01-01":{
"nb_uniq_visitors":1,
"nb_visits":2,
"avg_time_on_site":52,
},
"2018-01-02":[],
"2018-01-03":{
"nb_uniq_visitors":1,
"nb_visits":3,
"avg_time_on_site":83,
},
"2018-01-04":[]
}
我想将
datePeriod
中的$("#avgtime").html(avgtime / datePeriod);
函数替换为另一个计数JSON中总行的函数,但不包括没有值的日子。我尝试过首先研究解决方案,但很茫然。谢谢您的帮助。
这是我的完整剧本
setTimeout(function() {
$('#DateSelector').val('30').trigger("change")
}, 1000);
function datePeriod() {
let datePeriod = $("#DateSelector").val();
$("#DateShow").html(datePeriod);
$.getJSON(`https://discovrbookings.innocraft.cloud/?module=API&method=API.get&format=json&idSite=2&period=day&date=last${datePeriod}&token_auth=68aa5bd12137f13255dcb98794b65dff`, (data) => {
//console.log(data);
let avgtime = 0;
for (i in data) {
if (data[i].avg_time_on_site) {
avgtime += data[i].avg_time_on_site;
}
}
$("#avgtime").html(avgtime / datePeriod);
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="DateSelector" id="DateSelector" onchange="datePeriod();">
<option value="7">Last 7 Days</option>
<option value="14">Last 14 Days</option>
<option value="30">Last 30 Days</option>
<option value="90">Last 90 Days</option>
<option value="365">Last 365 Days</option>
</select>
<h2 id="avgtime"></h2>
最佳答案
我建议您只使用另一个变量来跟踪循环中的日子。这样,您就独立于datePeriod
。
let avgtime = 0;
//another variable, because you can't use datePeriod
let dayCount = 0;
for (i in data) {
if (data[i].avg_time_on_site) {
avgtime += data[i].avg_time_on_site;
dayCount++;
}
}
$("#avgtime").html(avgtime / dayCount);