坚持根据日期从两个单独的数组中构建对象

时间:2019-01-31 10:21:24

标签: javascript arrays loops date object

所以基本上,我在一个范围之间有一个日期数组:

['2019-01-01, '2019-01-02', '2019-01-03'...'2019-01-30'];

还有一个对象数组,其中包含上述范围内的日期的数据:

[{date: '2019-01-01', count: 2'}, {date: '2019-01-05', count: 4'}...{date: '2019-01-25', count: 3}]

请注意,如果在特定日期在第一个数组中的那些范围之间没有计数,则它根本不会出现在第二个数组中。因此,如果第一个数组中有30个日期,那么第二个数组中可能只有25个日期。

最终,我想以以下形式构建对象数组:

[
 { date: '2019-01-01',
   count: 2
 },
 {
   date: '2019-01-02',
   count: 0
 },
];

因此,该数组将包含范围内的每个日期的对象(从第一个数组开始),并获得计数(从第二个数组开始)。如果日期不在第二个数组中,则它将在对象数组中将计数设置为0。

我很难解决这个问题。我已经尝试过各种循环,但是一无所获。谁能指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

创建一个与range相同值的新数组。

对于range的每个值,请检查counts是否已经存在计数。

如果有一个,将其退回。如果没有,则返回一个新的“ 0 count”。

代码版本:

const range = [
    '2019-01-01',
    '2019-01-02',
    '2019-01-03', 
    '2019-01-04',
    '2019-01-05',
    '2019-01-06',
    '2019-01-07',
];

const counts = [
    {date: '2019-01-01', count: 2}, 
    {date: '2019-01-05', count: 4}, 
    {date: '2019-01-07', count: 3},
];

const result = range.map(date =>
  counts.find(element => element.date === date) || { date, count: 0 });

console.log(result);