相对于另一个数组填充缺失值的数组

时间:2017-11-22 17:15:18

标签: javascript arrays

需要填写缺少日期的值。 我有一个如下数组,

// actual array
    var array1 = [{
    date: "2017-11-07",
    value: 23
    },
    {
    date: "2017-11-05",
    value: 30
    },
    {
    date: "2017-11-04",
    value: 24
    },
    {
    date: "2017-11-02",
    value: 23
    }];

我需要填充数组,如下所示,

// expected result
    var array2 = [{
    date: "2017-11-01",
    value: 23
    },
    {
    date: "2017-11-02",
    value: 23
    },
{
    date: "2017-11-03",
    value: 23
    },
{
    date: "2017-11-04",
    value: 24
    },
{
    date: "2017-11-05",
    value: 30
    },
{
    date: "2017-11-06",
    value: 30
    },
{
    date: "2017-11-07",
    value: 23
    }];

请告诉我如何使用上一个日期值添加缺失值。

1 个答案:

答案 0 :(得分:0)

首先很难使用datestrig,让我们定义一些转换函数:

const toDate = str => ( split => new Date(split[0], split[1] - 1, split[2]) )(str.split("-")),
           toString = date => date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate(),
           DAY = 1000 * 60 * 60 * 24;

那么对数组进行排序可能很好,我们可以存储实际日期:

array1.sort((a,b) => {
  a.time = toDate(a.date);
  b.time = toDate(b.date);
  return a.time - b.time;
});

所以现在我们只需要填补空白:

const add = [];
array1.reduce( (before, after, i) => {
  for(let time = +before.time + DAY; time < after.time; time += DAY)
     add.push({ value: before.value, time, date: toString(new Date(time))});
   return after;
});

结果将是:

const array2 = array1.concat(add);