【问题标题】:Update an array with dates and value to include missing dates使用日期和值更新数组以包含缺失的日期
【发布时间】:2021-02-20 13:10:42
【问题描述】:

我有 2 个包含以下数据的数组

数组 1 有 8 个元素,可能会有所不同,从不超过 30 个元素
我从浏览器控制台复制粘贴了这些值,认为这样可读性最强。

数组1
0:{date_usage:“2021-01-28 00:05:28”,收据:3}
1:{date_usage:“2021-02-01 00:05:28”,收据:4}
2:{date_usage:“2021-02-02 00:05:28”,收据:8}
3:{date_usage:“2021-02-05 15:05:16”,收据:4}
4:{date_usage:“2021-02-09 15:05:17”,收据:13}
5:{date_usage:“2021-02-10 11:12:10”,收据:1}
6:{date_usage:“2021-02-18 00:05:29”,收据:5}
7:{date_usage:“2021-02-19 15:05:18”,收据:3}

数组 2 有 30 个元素。
它是一个包含最近 30 天日期的数组。
所有“收据”都是 0,所有时间都可能不同。

数组2
0:{date_usage:“2021-01-21 00:00:00”,收据:0}
1:{date_usage:“2021-01-22 14:00:00”,收据:0}
2:{date_usage:“2021-01-23 09:00:00”,收据:0}
3:{date_usage:“2021-01-24 10:00:00”,收据:0}
......等
29:{date_usage:“2021-02-21 00:00:00”,收据:0}

我想使用 JavaScript 将缺失的日期添加到数组 1,或者创建一个包含此数据的新数组。
时间不需要匹配,只需匹配日期即可。
每个日期在两个数组中只会出现一次。 我知道这是一个简单的问题,而且这个论坛上有很多变体。
但是每次我尝试解决方案时都会卡住,所以我希望有人可以帮助并指出正确的方向。
如果有不清楚的地方,请告诉我,我会进一步详细说明。

【问题讨论】:

    标签: javascript arrays date compare


    【解决方案1】:
    for (let i = 0; i < array2.length; i++) {
        if (!array1.includes(array2[i])) {
            array1.push(array2[i])
        }
    }
    

    试试这个

    【讨论】:

    • 感谢您的建议。但我收到以下错误:'未捕获的 TypeError:array1.include 不是函数'认为您有错字(包括应该包含?)。我想我可以用这些来重新设计它以获得我想要的东西。谢谢大家!
    【解决方案2】:

    如果我理解正确,您想合并这两个数组,因此数据按日期排序。

    一种方法是递归地对 (array1+array2) 进行排序。 另一种方法是在 for 循环中逐个附加到第一个数组。

    【讨论】:

    • 嗨。对不起,如果我不清楚。结果已经排序。我的问题是如何检查 array1 中缺少的日期并将它们添加到 'receipts': 0 中。时间无关紧要。仅日期 (yyyy-mm-dd)
    【解决方案3】:

    所以我就这样结束了。

           //get the dates in array1, the first part (yyyy-mm-dd)
           var arr1_dates = array1.map(function(item) {
                return item.date_usage.split(" ")[0];
            });
    
            //Compare array1 dates with array2 dates &
            //Add missing to array1    
            for (let i = 0; i < array2.length; i++) {
                var date = array2[i].date_closed.split(" ")[0];
    
                if (!arr1_dates.includes(date)) {
                    array1.push(array2[i])
                }
            }
    
            //Sort the array by date
            array1 = array1.sort(function(a, b) {
                return new Date(b.date_usage) - new Date(a.date_usage);
    
            });
    

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      • 2017-12-12
      相关资源
      最近更新 更多