当前位置: 首页 > 知识库问答 >
问题:

javascript - js 根据已有的日期数组,生成365天的数组,将已有的日期填写在数组对应的位置?

长孙宜
2024-07-03

js 根据已有的日期数组,生成365天的数组,将已有的日期填写在数组对应的位置,没有的日期填写空,
请问这个函数怎么写?

假如:

let arr = ["2019/1/1", "2019/1/4", "2019/1/6"]

要生成结果数组

result = ["2019/1/1",,,"2019/1/4",,"2019/1/6",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,]; // 365个数据

共有3个答案

小牛22974
2024-07-03
let result = arr.reduce((a, i) => {
    a[(new Date(i) - new Date('2019-01-01')) / 864e5] = i
    return a
}, Array.from({length: 366}))
壤驷子安
2024-07-03
  const arr = ["2019/1/1", "2019/1/4", "2019/1/6"]

  // js 根据已有的日期数组,生成365天的数组,将已有的日期填写在数组对应的位置,没有的日期填写空
  function getDateArray(activeDates) {
    const dateArray = []
    for (let i = 0; i < 365; i++) {
      const date = new Date(2019, 0, 1)
      date.setDate(date.getDate() + i)
      const dateStr = date.toLocaleDateString()
      if (activeDates.includes(dateStr)) {
        dateArray.push(dateStr)
      } else {
        dateArray.push('')
      }
    }
    return dateArray
  }

  console.log(getDateArray(arr));
贺懿轩
2024-07-03

在JavaScript中,直接创建具有空位的数组(如[, ,,]中的逗号)是不被允许的,因为这将导致语法错误。不过,你可以使用undefinednull作为占位符,并在后续处理中将其视为空值。

以下是一个可能的函数实现,该函数接受一个日期数组,并生成一个包含365天(假设是闰年以外的年份)的数组,其中已知的日期将填写在正确的位置,其余位置为undefined

function generateYearArray(dates) {
    // 创建一个映射,将日期字符串映射到它们的索引(从0开始的日期偏移)
    const dateMap = dates.reduce((map, dateString, index) => {
        const date = new Date(dateString);
        const dayOfYear = getDayOfYear(date); // 自定义函数,获取一年中的第几天
        map[dayOfYear] = dateString;
        return map;
    }, {});

    // 自定义函数,获取一年中的第几天
    function getDayOfYear(date) {
        const start = new Date(date.getUTCFullYear(), 0, 0);
        const diff = date - start + ((start.getTimezoneOffset() - date.getTimezoneOffset()) * 60 * 1000);
        const oneDay = 1000 * 60 * 60 * 24;
        return Math.floor(diff / oneDay);
    }

    // 创建一个长度为365的数组,并使用映射填充已知的日期
    const result = Array.from({ length: 365 }, (_, i) => dateMap[i] || undefined);
    return result;
}

// 示例使用
let arr = ["2019-01-01", "2019-01-04", "2019-01-06"];
let result = generateYearArray(arr);
console.log(result);
// 输出类似:[ '2019-01-01', undefined, undefined, '2019-01-04', undefined, '2019-01-06', ... ]

注意:这个实现假设输入的日期字符串都是有效且按照升序排列的。如果日期字符串可能无效或未排序,你需要在将日期添加到映射之前添加额外的验证和排序步骤。

此外,由于JavaScript数组中的空位(undefined)在大多数操作中都被视为有效的元素,因此你可以将上述undefined视为空位。如果你需要在后续处理中明确区分undefined和有效的日期值,你可以使用其他占位符(如null或特殊字符串)来代替。

 类似资料:
  • 问题内容: 我希望“范围”是一个日期对象数组,两个日期之间的每一天。 诀窍在于它也应该处理月份和年份的边界。 问题答案:

  • 问题内容: 预期输入: 预期产量: 问题答案: 您还可以查看DatePeriod类: 这应该使您具有DateTime对象的数组。 进行迭代

  • 我试图将一个数组的值添加到一个已经存在的数组中,该数组已经有一个值。我的方法是创建一个新的数组,其长度为已有数组的长度+我要添加的值的长度。然后,我只需循环整个数组,并将值添加到新数组的索引中。我的方法如下所示: null 我想不出解决办法

  • 我有一个数据集,我需要在其中计算不同日期和初始日期之间的天差。更准确地说,这是列表的示例: 我想要实现的是计算页面“b”中的第一个日期与剩余天数之间的天数。因此,对于页面“b”,我现在认为第二个条目是第一个日期后的 1 天,下一个条目是 2 天,依此类推。这里的问题是我有不同的页面和不同的初始日期。 谢谢

  • 我的数据如下: 我想计算每个组每年日期之间的平均天数。我尝试了以下代码,但收到以下错误: 我的日期列的类别是日期。

  • 本文向大家介绍返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值,包括了返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个函数,该函数需要一个正整数,并返回一个数组,该数组填充有该数字的所有数字的位置值。 例如- 让我们为该函数编写代码。 这个问题非常适合递归方法,因为我们将迭代数字的每个数字。因此,

  • 我的情况是这样的: 我必须折叠这些相隔不超过90天的物体。 要选择两个赢家中的哪一个,请选中: 首先谁具有最大的优先A属性,如果他们是相等的然后 勾选"priorityB",如果这也一样 检查较小的日期,如果这也是相同的然后 id较小的那个。 我的执行情况如下: 但是这个实现有两个问题: 我只对具有相同日期的对象进行分组,相反,我必须能够对那些在相同日期范围内的对象进行分组,那些日期间隔不超过90

  • 问题内容: 我想运行一个查询 并返回如下数据: 问题答案: 此解决方案不使用 循环,过程或临时表 。子查询会生成最近10,000天的日期,并且可以扩展为任意向前或向后的日期。 输出: 性能说明 在这里对其进行测试,其性能出奇地好: 上面的查询花费了0.0009秒。 如果我们扩展子查询以生成近似值。100,000个数字(因此约有274年的日期),运行时间为0.0458秒。 顺便说一句,这是一种非常可