Javascript 获取数组中每天的平均值

Javascript 获取数组中每天的平均值,javascript,jquery,arrays,node.js,Javascript,Jquery,Arrays,Node.js,我试图在Javascript/jQuery中找到一种有效的方法来执行以下操作: 我得到了一个数组,每个对象都包含一个日期和等级。许多条目的日期相同。我想创建另一个对象数组,每个对象包含日期(唯一)和当天所有评分的平均值 示例数据: var array = [{ date: "07-08-2018" rating: 3 },{ date: "07-08-2018" rating: 5 },{ date: "08-08-2018" ra

我试图在Javascript/jQuery中找到一种有效的方法来执行以下操作:

我得到了一个数组,每个对象都包含一个日期和等级。许多条目的日期相同。我想创建另一个对象数组,每个对象包含日期(唯一)和当天所有评分的平均值

示例数据:

var array = [{
    date: "07-08-2018"
    rating: 3
    },{
    date: "07-08-2018"
    rating: 5
    },{
    date: "08-08-2018"
    rating: 2
    },{
    date: "08-08-2018"
    rating: 1
    },{
    date: "09-08-2018"
    rating: 3
    },{
    date: "09-08-2018"
    rating: 5
    }
]
我想要的是:

var averageArray = [{
    date: "07-08-2018",
    rating: 4
    },{
    date: "08-08-2018",
    rating: 1.5
    },{
    date: "09-08-2018",
    rating: 4
    }]
我的当前代码(仅返回2个值,而不是3个值)

var oldDate=新日期(数组[0].Date);
var总和=0;
变量计数器=0
var newArray=[]
对于(var i=0;i旧日期){
控制台日志(“新的一天”);
var平均值=(总和/计数器);
//控制台日志(平均值);
var newObject=新对象({
日期:日期:,
评级:平均
});
newArray.push(newObject);
计数器=0;
总和=0;
oldDate=日期;
}
计数器++;
总和=总和+数组[i]。额定值;
console.log(计数器+“”+总和)
}
console.log(newArray)

对事物进行分组的最佳方法是创建一个使用公共值作为属性键的对象

然后,在将它们分组到该对象后,将结果映射到新数组

var tmp={};
data.forEach(功能(项){
//如果当前日期的属性已存在,我们将更新现有属性,否则将启动新属性
var obj=tmp[item.date]=tmp[item.date]|{计数:0,总数:0};
//所有评级的增量计数和总数
obj.count++;
obj.total+=项目等级
});
var res=Object.entries(tmp).map(函数(条目){
返回{日期:条目[0],平均值:条目[1]。总计/条目[1]。计数}
})
console.log(res)

风险值数据=[{
日期:“2018年8月7日”,
评级:3
},{
日期:“2018年8月7日”,
评级:5
},{
日期:“2018年8月8日”,
评级:2
},{
日期:“2018年8月8日”,
评级:1
},{
日期:“2018年8月9日”,
评级:3
},{
日期:“2018年8月9日”,
评级:5
}
]

请向我们展示您的尝试,并概述您遇到的问题。Stackoverflow不是免费的代码编写服务。这里的目标是让其他人在代码无法正常工作时帮助您改进代码忘记这一点,只是添加了我当前的代码。它在最后一个数组中只返回两个值,感觉需要很多行。太棒了,谢谢!你能详细说明一下这一行发生了什么吗:var obj=tmp[item.date]=tmp[item.date]| |{count:0,total:0};当然它是if(tmp[item.date]){tmp[item.date]=tmp[item.date]/*等于existing*/}的缩写,否则{tmp[item.date]={/*new object*/}。然后
var obj=tmp[item.date]
只是为了缩短在
console.log(tmp)
中写入属性值hrow的更新的时间,看看它看起来像什么!我学习了一种新的速记法,而不是将三元运算符与
一起使用。
var oldDate = new Date(array[0].date);
var sum = 0;
var counter = 0
var newArray = []

for(var i = 0; i < array.length; i++){
    var date = new Date(array[i].date);

    if(date > oldDate){
        console.log("new day");
        var avg = (sum/counter);
        //console.log(avg);
        var newObject = new Object({
            date: date,
            rating: avg
        });
        newArray.push(newObject);
        counter = 0;
        sum = 0;
        oldDate = date;
    }
    counter++;
    sum = sum + array[i].rating;
    console.log(counter + " " + sum)
}

console.log(newArray)