必须在日期数组中过滤日期,该日期应包含一年中的最新日期。
data = [
"2017-06-14",
"2017-06-30",
"2017-09-29",
"2017-12-29",
"2018-03-29",
"2018-06-29",
"2018-09-28",
"2018-12-31",
"2019-03-29",
"2019-06-28"
]
预期
data = ["2017-12-29","2018-12-31","2019-06-28"]
答案 0 :(得分:0)
请始终发布您的尝试,而不仅是预期的结果,以便我们可以协助您采用新方法,因为可以有多种方法来解决同一问题。
我尝试了如下操作:
1)按升序对日期进行排序。
2)仅过滤年份的最后日期。
var res = ["2017-06-14","2017-06-30","2017-09-29","2017-12-29","2018-03-29","2018-06-29","2018-09-28","2018-12-31","2019-03-29","2019-06-28"]
.sort((a, b) => a.replace(/-/g, '') - b.replace(/-/g, ''))
.filter((d, i, c) => !c[i + 1] || d.split('-')[0] != c[i + 1].split('-')[0])
console.log(res)
答案 1 :(得分:0)
这是按年分组 和按最新过滤 的组合。
此方法使用Map
和年份作为关键字,并检查日期是否大于实际日期,然后替换旧日期。
const getYear = date => date.slice(0, 4);
var data = [ "2017-06-14", "2017-06-30", "2017-09-29", "2017-12-29", "2018-03-29", "2018-06-29", "2018-09-28", "2018-12-31", "2019-03-29", "2019-06-28"],
result = Array.from(data
.reduce((m, d) => m.get(getYear(d)) > d ? m : m.set(getYear(d), d), new Map)
.values()
);
console.log(result);