我有一个对象数组。每个对象都包含一个日期属性。
我需要返回一个具有date属性的对象数组。但是,具有连续日期(相隔1天)的日期属性的对象需要在其自己的数组中。
示例输入:
const inputArray = [ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate, ObjectwDate];
示例预期输出:
// example output
const finalArray = [ObjectwDate, ObjectwDate, [ObjectwDate, ObjectwDate, ObjectwDate], ObjectwDate, [ObjectwDate, ObjectwDate]];
我真的不知道如何让它在所有情况下都能工作。到目前为止,我有类似于以下内容的东西:
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来计算天数差值:
发布于 2018-06-01 10:08:42
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))
https://stackoverflow.com/questions/50634706
复制相似问题