我有一个(部分)工作函数,我试图找到此数据集中所有视频的平均持续时间。
目前仅返回上一个v.duration
/ data.media.length
,而不是v.duration
/ data.media.length
的总和。
任何帮助?
$.getJSON(projectMedias, function (data) {
$.each(data.medias, function (i, v) {
var duration = v.duration;
var medias = data.medias.length;
var avg = duration/medias;
$('#avg').html(avg);
})
});
答案 0 :(得分:2)
您的代码存在的问题是,您在尝试计算平均值时只考虑了循环的当前元素。对于平均值,您需要所有元素的总和和元素的数量。在循环内部,您只需要增加总数。这可以通过多种方式完成,但主要是保留代码:
var total = 0
$.getJSON(projectMedias, function (data) {
$.each(data.medias, function (i, v) {
total += v.duration;
})
var avg = total/data.medias.length;
$('#avg').html(avg);
});
如果您想尝试使用单行程序,可以使用javascript的一些新功能,并完全跳过jQuery:
var avg = data.medias.map(function(a){return a.duration;})
.reduce(function(a,b){return a+b;})/data.medias.length;
第一部分map
返回一个数组,在这种情况下,返回键duration
的所有值,然后通过调用该数组上的reduce
,我们可以将所有值和最后得到的代码是total
。将该值除以medias
内的元素总数得出平均值。
假设数据结构类似于data = { medias : [{duration:0},{duration:10}] };
答案 1 :(得分:1)
总计循环内持续时间的总和,除以外部的长度。
var sum = 0;
$.each(data.medias, function (i, v) {
var duration = v.duration;
sum += duration;
})
var avg = sum / data.medias.length;
$('#avg').html(avg);
答案 2 :(得分:0)
$.getJSON(projectMedias, function (data) {
var _sum = 0;
// Loop in to calculate the sum.
[].forEach.call(data.media, function(inst){
_sum += inst.duration;
});
//Devide with length to get the average
var _avg = _sum/data.medias.length;
$('#avg').html(_avg);
console.log(_avg);
});