Javascript lodash-具有跳过年份值的订单日期

Javascript lodash-具有跳过年份值的订单日期,javascript,sorting,momentjs,lodash,Javascript,Sorting,Momentjs,Lodash,我收集了不同年份的日期(瞬间对象)。我只需要按“ddMM”格式(如跳过年份)对这些日期进行排序 有没有办法做到这一点 创建日期数组的副本,为所有日期设置相同的年份-这似乎不是一个好的解决方案 要进行排序,请使用lodash。orderBy您可以将orderBy与指定所需顺序的一系列函数一起使用(其中函数从时刻对象获取日期和月份): const date=(s)=>时刻(s,'YYYY-MM-DD'); 施工日期=[日期('2017-02-01')、日期('2017-01-01')、日期('20

我收集了不同年份的日期(瞬间对象)。我只需要按“ddMM”格式(如跳过年份)对这些日期进行排序

有没有办法做到这一点

创建
日期
数组的副本,为所有日期设置相同的年份-这似乎不是一个好的解决方案


要进行排序,请使用lodash
。orderBy

您可以将
orderBy
与指定所需顺序的一系列函数一起使用(其中函数从
时刻对象获取
日期和
月份):

const date=(s)=>时刻(s,'YYYY-MM-DD');
施工日期=[日期('2017-02-01')、日期('2017-01-01')、日期('2016-02-03')、日期('2018-02-02')、日期('2014-12-25');
const result=u.orderBy(日期,[m=>m.date(),m=>m.month());
控制台日志(结果)

您应该使用“MMDD”格式,而不是“DDMM”

无需将其转换回片刻,因为它只是对数组进行排序

var dates = ['2017-02-01', '2017-01-01', '2016-02-03', '2018-02-02', '2014-12-25'];
var orderedDates = dates.sort(); // ['2017-01-01', '2017-02-01', '2018-02-02', '2016-02-03', '2014-12-25']

如果只想在日期和月份执行排序,则必须将年份和ddMM分开。然后在ddMM上执行排序。但在ddMM上执行排序时,还必须跟踪年份。因此,您必须创建一个obj类型的日期。然后必须在ddMM属性上使用u.orderBY。您将获得日期对象的排序数组。我刚刚创建了此数组,如果您已经尝试过此方法,请跳过<代码>风险值(要求('lodash')风险值日期=['2017-02-01','2017-01-01','2016-02-03','2018-02-02'];var o=dates.map((d)=>{var s=d.split(“-”)return{year:s[0],ddMM:s[1]+“-”+s[2]})console.log(u.orderBy(o,['ddMM'],['asc'])
@varatharajan hm,thx,你能给你的问题添加期望的结果吗?@Akrion这就像是代码中的注释lines@demo我相信这是您想要的订单:
['2017-01-01'、'2017-02-01'、'2018-02-02'、'2016-02-03'、'2014-12-25']
,这是我运行代码片段时得到的?我看到的
[“2016-12-31T22:00:00.000Z”,“2017-01-31T22:00:00.000Z”、“2018-02-01T22:00:00.000Z”、“2016-02-02T22:00:00.000Z”、“2014-12-24T22:00:00.000Z”]
@演示非常奇怪。我创建了一个小提琴,在控制台中得到了正确的输出:不管怎样,如果你已经有了答案,就不用担心了。嗯,奇怪……堆栈上可能有一些错误:D因为我从你的代码片段中运行代码,得到了我在上面发布的结果……我没有看到,
2016-12-31T22:00:00.000Z
甚至没有出现在输入中数组…所以我不知道
var orderedDates = _.orderBy(dates, e => moment(e).format('MMDD'));