首页 > 解决方案 > Javascript用数组中的日期和0计数填充缺失的日期

问题描述

我有一个通过代码生成的数组,我正在计算从现在到 7 天前的每一天的每日发生次数。现在我的代码正在跳过没有出现的日子,但我想将这些日子与 0 计数值一起插入。这是我的代码:

var myObj;
fetch('https://blahblahblah?'+param1+param2+"FromDate"+"="+moment().subtract(7,'d').format('YYYY-MM-DD'))
.then(res=>res.json())
.then(data=>myObj= data);

var myRes= [];

myObj.forEach(function (elem) {
    var date = elem.CreatedDate.split(' ')[0];


    if (myRes[date]) {
        myRes[date] += 1;
    } else {
        myRes[date] = 1;
    }
});

现在我得到了类似的结果:

2020-12-11: 1
2020-12-12: 2
2020-12-13: 1
2020-12-15: 2
2020-12-16: 1

因为在 12-10 我没有任何价值,在 12-14 也没有。给定开始时间moment().subtract(7,'d').format('YYYY-MM-DD')

如何输出具有 0 值的天数,如下格式?:

2020-12-10: 0
2020-12-11: 1
2020-12-12: 2
2020-12-13: 1
2020-12-14: 0
2020-12-15: 2
2020-12-16: 1

非常感谢

编辑:这是我的 obj:

[{Id, Var1, Var2, CreationDate},
{1, 123, Var2, 2020-12-11},
{2, 1234, Var2, 2020-12-12},
{3, 12345, Var2, 2020-12-12},
{4, 1234, Var2, 2020-12-13},
{5, 321, Var2, 2020-12-15},
{6, 3214, Var2, 2020-12-15},
{7, 5432, Var2, 2020-12-16}]

标签: javascriptarraysfill

解决方案


计算 myRes 后,您可以创建一个包含最近 7 天日期的数组,然后与 myRes 进行比较以创建包含缺失日期的 finalResult。

let myRes = {
    '2020-12-11': 1,
    '2020-12-12': 2,
    '2020-12-13': 1,
    '2020-12-15': 2,
    '2020-12-16': 1,
}


const dates = [];
const NUM_OF_DAYS = 7; // get last 7 dates.

for (let i = 0; i < NUM_OF_DAYS; i++) {
  let date = moment();
  date.subtract(i, 'day');
  dates.push(date.format('YYYY-MM-DD'));
}


let finalResult = {};
dates.reverse().forEach(date => {
    if(!myRes.hasOwnProperty(date)) {
        finalResult[date] = 0;
    } else {
        finalResult[date] = myRes[date];
    }
});

console.log(finalResult);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


推荐阅读