Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算每天的平均值,并在提供的时间范围内存储在阵列中_Javascript_Node.js - Fatal编程技术网

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));