根据年份筛选日期列表中的最新日期

时间:2019-07-12 06:44:25

标签: javascript arrays json

必须在日期数组中过滤日期,该日期应包含一年中的最新日期。

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"]

2 个答案:

答案 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);