Javascript 如何获取数组中每个月的最新时间戳

Javascript 如何获取数组中每个月的最新时间戳,javascript,arrays,sorting,momentjs,Javascript,Arrays,Sorting,Momentjs,我有一个数组,里面有一堆对象和一些键/值对+时间戳(moment.js格式的时间戳)。 我总共有12个月的时间戳,需要获得每个月的最后一个时间戳,并删除其他对象 事实上,我甚至不知道如何开始。 我已经用uu.sortBy按日期对数组进行了排序,但不知道如何继续 array1 = [ {name:name1,timestamp:2018-09-15T07:00:00.0}, {name:name2,timestamp:2018-09-15T12:00:00.0}, {name:name3,time

我有一个数组,里面有一堆对象和一些键/值对+时间戳(moment.js格式的时间戳)。 我总共有12个月的时间戳,需要获得每个月的最后一个时间戳,并删除其他对象

事实上,我甚至不知道如何开始。 我已经用uu.sortBy按日期对数组进行了排序,但不知道如何继续

array1 = [
{name:name1,timestamp:2018-09-15T07:00:00.0},
{name:name2,timestamp:2018-09-15T12:00:00.0},
{name:name3,timestamp:2018-09-28T05:00:00.0},
{name:name4,timestamp:2018-09-30T01:00:00.0},
{name:name5,timestamp:2018-10-02T10:00:00.0},
{name:name6,timestamp:2018-10-02T11:00:00.0},
{name:name7,timestamp:2018-10-15T07:00:00.0},
{name:name8,timestamp:2018-12-05T08:00:00.0},
{name:name9,timestamp:2018-12-05T09:00:00.0},
{name:name10,timestamp:2018-12-05T10:00:00.0}
]
预期结果是

array1 = [
{name:name4,timestamp:2018-09-30T01:00:00.0},
{name:name7,timestamp:2018-10-15T07:00:00.0},
{name:name10,timestamp:2018-12-05T10:00:00.0}
]

您可以选择日期部分,并将每个条目存储在该日期下的hastable中。因此,每个具有相同月份的条目都将覆盖上一个条目,并保留最后一个条目:

 const byMonth = {};

 for(const { name, timestamp } of array1) {
   const month = timestamp.slice(0, 7);
   byMonth[month] = { name, timestamp };
 }

 const result = Object.values(byMonth);
常量数组1=[
{name:“name1”,时间戳:“2018-09-15T07:00:00.0”},
{名称:“名称2”,时间戳:“2018-09-15T12:00:00.0”},
{name:“name3”,时间戳:“2018-09-28T05:00:00.0”},
{名称:“名称4”,时间戳:“2018-09-30T01:00:00.0”},
{name:“name5”,时间戳:“2018-10-02T10:00:00.0”},
{name:“name6”,时间戳:“2018-10-02T11:00:00.0”},
{name:“name7”,时间戳:“2018-10-15T07:00:00.0”},
{name:“name8”,时间戳:“2018-12-05T08:00:00.0”},
{name:“name9”,时间戳:“2018-12-05T09:00:00.0”},
{名称:“名称10”,时间戳:“2018-12-05T10:00:00.0”}
];
constbymonth={};
for(数组1的常量{name,timestamp}){
const month=timestamp.slice(0,7);
byMonth[月份]={name,timestamp};
}
常量结果=对象值(按月);

控制台日志(结果)
将数组减少为一个以月为键的对象,每次找到它们时都覆盖它们,然后结果就是对象数组。值`:

常量数组1=[
{name:“name1”,时间戳:“2018-09-15T07:00:00.0”},
{名称:“名称2”,时间戳:“2018-09-15T12:00:00.0”},
{name:“name3”,时间戳:“2018-09-28T05:00:00.0”},
{名称:“名称4”,时间戳:“2018-09-30T01:00:00.0”},
{name:“name5”,时间戳:“2018-10-02T10:00:00.0”},
{name:“name6”,时间戳:“2018-10-02T11:00:00.0”},
{name:“name7”,时间戳:“2018-10-15T07:00:00.0”},
{name:“name8”,时间戳:“2018-12-05T08:00:00.0”},
{name:“name9”,时间戳:“2018-12-05T09:00:00.0”},
{名称:“名称10”,时间戳:“2018-12-05T10:00:00.0”}
];
const result=array1.reduce((acc,curr)=>{
const month=新日期(当前时间戳).getMonth()+1;
acc【月份】=当前金额;
返回acc;
}, {});

console.log(Object.values(result))
您希望最后一个时间戳基于它们在数组中的显示顺序,还是基于具有该月最新时间戳的条目?例如:如果数组中的最后两个条目切换了时间戳值,您仍然希望结果集中出现
name10
,还是希望出现
name9
?如果你所关心的只是“最后一个基于顺序”@Taki答案是一个很好的解决方案。如果您希望数组中的值随机化,并且希望“基于时间戳的每个月的最后一个条目”,那么它将不起作用。@dusthaines我希望基于时间戳的最后一个条目。Taki的答案很好,但我正在使用.map创建我需要的数组,然后减少并再次推送,以推送新数组中的条目,以摆脱月对象本身。谢谢!它工作得很好!我唯一不喜欢的是新创建的month对象(在我第一篇文章的评论中提到),但现在我很高兴我有了一个可行的解决方案:)