返回所有JSON值的平均值

时间:2015-11-18 17:28:57

标签: jquery json each average

我有一个(部分)工作函数,我试图找到此数据集中所有视频的平均持续时间。

目前仅返回上一个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); 
    })
});

3 个答案:

答案 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);
});