在后端进行时间倒序查询后,返回map类型的数据,在postman获取是这样:
[ { "2020": [ { "id": 39, "createTime": "2020-10-15T22:29:20.016", "year": 2020, "monthDay": "10-15", "title": "java数据结构61:冒泡排序" }, { "id": 37, "createTime": "2020-10-14T11:44:12.163", "year": 2020, "monthDay": "10-14", "title": "这是博客标题13" } ], "2019": [ { "id": 28, "createTime": "2019-10-15T18:57:41.409", "year": 2019, "monthDay": "10-15", "title": "这是博客标题5" }, { "id": 27, "createTime": "2019-10-15T18:57:38.442", "year": 2019, "monthDay": "10-15", "title": "这是博客标题4" }, { "id": 26, "createTime": "2019-10-15T18:57:36.086", "year": 2019, "monthDay": "10-15", "title": "这是博客标题3" } ], "2018": [ { "id": 25, "createTime": "2018-10-15T18:57:31.986", "year": 2018, "monthDay": "10-15", "title": "这是博客标题2" }, { "id": 24, "createTime": "2018-10-15T18:57:27.428", "year": 2018, "monthDay": "10-15", "title": "这是博客标题1" } ], "2017": [ { "id": 12, "createTime": "2017-10-14T11:44:12.163", "year": 2017, "monthDay": "10-14", "title": "### 锟桑的第一篇博客" } ] } ]
浏览器获取结果变成了:
所以后端就算进行了排序处理,但是浏览器还是有自己的想法,在这里就要进行前端处理了:
//先把获取到的json对象转成map let map = new Map(); //archive就是接口返回的json对象 for (let year in archive) { map.set(year,archive[year]); } //把map转换为array就可以排序了 let arr = Array.from(map); arr.sort(function (a,b) { //map转成array后,下标0为key,下标1为value //这里根据年份进行倒序排序 return b[0]-a[0]; }); console.log(arr)
可以从打印信息看出来已经正确排序了:
虽然解决了问题,但是这无疑会增加前端的工作量,所以推荐的做法是,在后端再定定义个类,比如:
public class ArchivePlusVo { private String year; private List<ArchiveVo> list; }
然后把要返回的Map对象转换成List<ArchivePlusVo>再返回就好了。