首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何按日期范围过滤日期数组?

如何按日期范围过滤日期数组?
EN

Stack Overflow用户
提问于 2018-06-01 08:54:29
回答 1查看 444关注 0票数 0

我有一个对象数组。每个对象都包含一个日期属性。

我需要返回一个具有date属性的对象数组。但是,具有连续日期(相隔1天)的日期属性的对象需要在其自己的数组中。

示例输入:

代码语言:javascript
复制
const inputArray = [ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate];

示例预期输出:

代码语言:javascript
复制
// example output
const finalArray = [ObjectwDate, ObjectwDate, [ObjectwDate, ObjectwDate, ObjectwDate], ObjectwDate, [ObjectwDate, ObjectwDate]];

我真的不知道如何让它在所有情况下都能工作。到目前为止,我有类似于以下内容的东西:

代码语言:javascript
复制
 const rangeArray = [];
 const finalArray = [];

// sort input array for oldest date 
const format = inputArray.sort((a, b) => (
   new Date(a.date) - new Date(b.date)
));

format.sort((aDate, bDate) => {
  if (differenceInDays(bDate.date, aDate.date) === 1) {
     rangeArray.push(aDate, bDate);
  }

  finalArray .push(bDate);
});                

我觉得这不是解决我问题的最有效的方法。我想知道是否有更好的方法遍历数组,并将所有具有连续日期的对象放入它们自己的数组中。

任何帮助都将不胜感激。

编辑:我正在使用date-fns来计算天数差值:

https://date-fns.org/v1.29.0/docs/differenceInDays

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 10:08:42

代码语言:javascript
复制
function randomDate(start, end) {
    return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}
let dates = [];

for (let i = 0; i < 20; i++)
{
  dates.push(randomDate(new Date(2018, 1, 5), new Date()));
}


dates = dates.sort((a, b) => a - b);



function GetDateDifference(date1, date2)
{
  var timeDiff = Math.abs(date2.getTime() - date1.getTime());
  var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
  return diffDays;
}

function CollectNearDates(arr)
{
  if(arr.length <= 1) return arr
  let outer = [];
  let inner = [arr[0]];
  let previousDate = inner[0];

  for(let i = 1; i < arr.length; i++)
  {
    let currentDate = dates[i];
    let difference = GetDateDifference(previousDate, currentDate);
    if(difference <= 1)
    {
      inner.push(previousDate);
      previousDate = currentDate;
      continue;
    }
    switch(inner.length)
    {
      case 0:
        break;
      case 1:
        outer.push(inner[0]);
        break;
      default:
        outer.push(inner);
    }
    previousDate = currentDate;
    inner = [currentDate]

  }
  if(inner.length === 1) outer.push(previousDate);
  else inner.push(previousDate);
  return outer;
}

console.log(CollectNearDates(dates))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50634706

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档