我使用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,它将返回最近 30 天的 avgtime
。
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":[]
}
我想将 $("#avgtime").html(avgtime/datePeriod);
中的函数 datePeriod
替换为另一个计算 < 中总行数的函数strong>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);
关于javascript - 具有对象的 JSON 行的计数,不包括空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48141639/