javascript - 通过改变其形式的一键对数组进行排序
问题描述
我有以下问题。我有一系列活动,我必须按日期排序。问题是“日期”键并不总是相同的。如果是一天的活动,它看起来像:
date: "2019-10-25T00:00:00.000Z"
但如果是两天或更长时间,它看起来像:
date:{dateFrom: "2017-05-13T00:00:00.000Z", dateTo: "2017-05-14T00:00:00.000Z"}
我尝试过正常排序或对两个永远不为空的键进行排序的函数类型。
那么,我怎样才能按日期对这个数组进行排序呢?
activities = [{
"date": {dateTo:"2019-05-20T00:00:00.000Z", dateFrom: "not important"},
activity: 5
},{
"date": {dateTo:"2019-05-05T00:00:00.000Z", dateFrom: "not important"},
activity: 2
},{
"date": "2019-05-10T00:00:00.000Z",
activity: 3
},{
"date": "2019-05-25T00:00:00.000Z",
activity: 6
},{
"date": "2019-05-01T00:00:00.000Z",
activity: 1
},{
"date": "2019-05-15T00:00:00.000Z",
activity: 4
}]
解决方案
一种解决方案是定义一个辅助函数,如getItemDate()
,结合常规Array#sort()
方法来实现您的要求:
const activities = [{
"date": {dateTo:"2019-05-20T00:00:00.000Z", dateFrom: "not important"},
activity: 5
},{
"date": {dateTo:"2019-05-05T00:00:00.000Z", dateFrom: "not important"},
activity: 2
},{
"date": "2019-05-10T00:00:00.000Z",
activity: 3
},{
"date": "2019-05-25T00:00:00.000Z",
activity: 6
},{
"date": "2019-05-01T00:00:00.000Z",
activity: 1
},{
"date": "2019-05-15T00:00:00.000Z",
activity: 4
}];
/* Define helper function that obtains a date timestamp from activities list item. If
date key is an object, item.date.dateTo is used, otherwise item.date is used */
function getItemDate(item) {
let date = (typeof item.date === 'object') ? item.date.dateTo : item.date;
return Date.parse(date);
}
/* Use helper function to sort items in activities list */
activities.sort((a,b) => getItemDate(a) - getItemDate(b))
console.log(activities)
推荐阅读
- javascript - 是否可以在浏览器上使用 javascript 文件重用另一个功能
- c++ - 为什么我不能将数组名称作为指针引用传递?
- python - 类 OfferSerializer 缺少“Meta.model”属性
- amazon-web-services - 在 AWS ubuntu 服务器中运行 pgadmin docker 容器
- webhooks - 在本地机器上设置 Google Drive webhook - 如何完全隐藏该站点,使其不被公众和机器人看到?
- ssh - 在 ssh 会话中从 systemd 显示颜色到嵌入式设备
- javascript - react-big-calendar 没有在其他组件中呈现任何内容
- javascript - 获取所选图像的完整路径
- git - git:将滞后分支合并到当前分支
- html - 在同一行中的两个 p 之间留出空间(flexbox)