Javascript 计算每天的平均值,并在提供的时间范围内存储在阵列中
假设我有一个对象数组:Javascript 计算每天的平均值,并在提供的时间范围内存储在阵列中,javascript,node.js,Javascript,Node.js,假设我有一个对象数组: let bookDetails = [{'bookName':'harrypottar','readingTime':1231,"date":"2021-04-19 07:07:58.896Z"}, {'bookName':'lotr','readingTime':909,"date":"2021-04-19 07:07:58.896Z"},
let bookDetails = [{'bookName':'harrypottar','readingTime':1231,"date":"2021-04-19 07:07:58.896Z"},
{'bookName':'lotr','readingTime':909,"date":"2021-04-19 07:07:58.896Z"},
{'bookName':'harrypottar','readingTime':190,"date":"2021-04-20 07:07:58.896Z"},
{'bookName':'lotr','readingTime':1254,"date":"2021-04-21 07:07:58.896Z"},
{'bookName':'lotr','readingTime':10,"date":"2021-04-21 07:07:58.896Z"}]
我想计算30天数组中每天的平均读取时间
我想计算每天的readingTime平均值,并将其存储在表示每月30天的数组中。预期O/P:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,01070190632,0,0,0,0,0,0,0,0]
为此,我尝试:
要计算每天的计数,我们可以使用以下方法:
let bookReadEveryDay = Array(30).fill(0);
bookDetails.forEach((obj) => {
const day = new Date(obj.date).getDate();
++bookReadEveryDay[day];
}
bookReadEveryDay = bookReadEveryDay.map(function (x) { return x })
console.LoginVoiceDaily=>[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]=>它给出数组中每天的计数。i、 e.第19天有2个元素,第20天有1个元素,第21天有2个元素,但是休息,因为没有其他的日子,所以它是0
但是我想计算每天的平均阅读时间,而不是计数。如果有人有任何想法或需要更多信息,请告诉我。您可以收集时间,计算并呈现每天的平均时间 常数 bookDetails=[{bookName:'harrypottar',阅读时间:1231,日期:2021-04-19 07:07:58.896Z},{bookName:'lotr',阅读时间:909,日期:2021-04-19 07:07:58.896Z},{bookName:'harrypottar',阅读时间:190,日期:2021-04-20 07:07:58.896Z},{bookName:'lotr',阅读时间:1254,日期:2021-04-21:07:58.896Z},{书名:'lotr',阅读时间:10,日期:2021-04-21 07:07:58.896Z}, temp=bookDetails.reducer,{readingTime,date}=>{ const key=+date.8,10; r[key]=r[key]|{计数:0,时间:0}; r[键]。时间+=读取时间; r[key].count++; 返回r; }, {}, 结果=数组。从{length:30},2;,i=>temp[i+1] ?温度[i+1]。时间/温度[i+1]。计数 : 0 ;
console.log…result;您可以收集时间,计算并呈现每天的平均时间 常数 bookDetails=[{bookName:'harrypottar',阅读时间:1231,日期:2021-04-19 07:07:58.896Z},{bookName:'lotr',阅读时间:909,日期:2021-04-19 07:07:58.896Z},{bookName:'harrypottar',阅读时间:190,日期:2021-04-20 07:07:58.896Z},{bookName:'lotr',阅读时间:1254,日期:2021-04-21:07:58.896Z},{书名:'lotr',阅读时间:10,日期:2021-04-21 07:07:58.896Z}, temp=bookDetails.reducer,{readingTime,date}=>{ const key=+date.8,10; r[key]=r[key]|{计数:0,时间:0}; r[键]。时间+=读取时间; r[key].count++; 返回r; }, {}, 结果=数组。从{length:30},2;,i=>temp[i+1] ?温度[i+1]。时间/温度[i+1]。计数 : 0 ; 控制台。日志…结果; 注:无论月份如何,上述代码始终有31个条目,如果需要根据月份动态处理这些条目
注:无论月份如何,上述代码始终有31个条目。如果需要,请根据月份动态处理这些条目。您可以添加预期结果吗?这将有所帮助。我已包含预期O/p。请查看。您可以添加预期结果吗?这将有所帮助。我已包含预期O/p。请查看。谢谢你能告诉我你为什么这么做吗,const key=+date.slice8,10;你能给我简要介绍一下代码吗?那会很有帮助的谢谢你这么多的解决方案,你能告诉我你为什么这么做吗,const key=+date.slice8,10;你能给我简要介绍一下代码吗?那真的会很有帮助fulThis对我来说看起来更容易理解,但我预期的O/P在数组中。你能不能提供简单数组中的O/P而不是对象。@SivaPradhan你能做对象。值结果这对我来说更容易理解,但我预期的O/P在数组中。你能不能提供简单数组中的O/P而不是对象。@SivaPradhan你能做对象。值结果
let bookDetails = [
{ bookName: 'harrypottar', readingTime: 1231, date: '2021-04-19 07:07:58.896Z' },
{ bookName: 'lotr', readingTime: 909, date: '2021-04-19 07:07:58.896Z' },
{ bookName: 'harrypottar', readingTime: 190, date: '2021-04-20 07:07:58.896Z' },
{ bookName: 'lotr', readingTime: 1254, date: '2021-04-21 07:07:58.896Z' },
{ bookName: 'lotr', readingTime: 10, date: '2021-04-21 07:07:58.896Z' },
];
const result = bookDetails.reduce((acc, item) => {
const day = new Date(item.date).getDate();
acc[day] = acc.hasOwnProperty(day) ?
{ readerCount: acc[day].readerCount + 1, readingTime:
acc[day].readingTime + item.readingTime }
: { readerCount: 1, readingTime: item.readingTime };
return acc;
}, {});
for (var i = 0; i < 31; i++) {
result[i] = (result[i] && result[i].readingTime / result[i].readerCount) || 0;
}
console.log(Object.values(result));