首页 > 解决方案 > 合并两个数组并按 dateTime 字段排序

问题描述

我有两个排序数组,并将它们组合成一个新的 listC。

listA = [
  {id:"1234435", name:"apple", dateTime_ISO:"2019-01-15 17:27:30"},
  {id:"1234435", name:"orange", dateTime_ISO:"2019-01-15 10:25:30"},
  {id:"1234435", name:"banana", dateTime_ISO:"2019-01-15 10:25:02"},
  {id:"1234435", name:"pear", dateTime_ISO:"2019-01-15 07:21:52"},
  {id:"1234435", name:"lemon", dateTime_ISO:"2019-01-15 07:22:24"},
]

listB = [
  {id:"1234435", name:"bread", dateTime:"2019-01-15 17:27:34"},
  {id:"1234435", name:"rice", dateTime:"2019-01-15 09:25:30"},
  {id:"1234435", name:"noodle", dateTime:"2019-01-15 07:25:02"},
  {id:"1234435", name:"pie", dateTime:"2019-01-15 07:06:52"},
  {id:"1234435", name:"cake", dateTime:"2019-01-15 06:22:24"},
]

listC = this.listA.concat(this.listB)

如何根据 dateTime 对 listC 进行排序?

所以我想得到一个新的 dateTimeList 只包含 dateTime,然后对这个列表进行排序,并以某种方式对 listC 进行排序

dateTimeList = this.listA
                .map(x => x.dateTime_ISO)
                .concat(this.listB.map(x => x.dateTime));

但是有什么可靠的方法可以对这个 dateTimeList 进行排序吗?

如果仅仅因为两个列表具有不同的字段名称(dateTime_ISO 和 dateTime)而无法完成,那么就假装它们是相同的。我可以将它们修改为在数据库中相同。

感谢任何帮助。

标签: javascriptarrays

解决方案


您可以利用短路对组合列表进行排序,同时仍然具有不同的属性。例如:

let listA = [{id:"1234435", name:"apple", dateTime_ISO:"2019-01-15 17:27:30"},{id:"1234435", name:"orange", dateTime_ISO:"2019-01-15 10:25:30"},{id:"1234435", name:"banana", dateTime_ISO:"2019-01-15 10:25:02"},{id:"1234435", name:"pear", dateTime_ISO:"2019-01-15 07:21:52"},{id:"1234435", name:"lemon", dateTime_ISO:"2019-01-15 07:22:24"},]
let listB = [{id:"1234435", name:"bread", dateTime:"2019-01-15 17:27:34"},{id:"1234435", name:"rice", dateTime:"2019-01-15 09:25:30"},{id:"1234435", name:"noodle", dateTime:"2019-01-15 07:25:02"},{id:"1234435", name:"pie", dateTime:"2019-01-15 07:06:52"},{id:"1234435", name:"cake", dateTime:"2019-01-15 06:22:24"},]
  
let listC = listA.concat(listB)

listC.sort((a, b) => {
    return (a.dateTime_ISO || a.dateTime).localeCompare((b.dateTime_ISO || b.dateTime))
})
console.log(listC)


推荐阅读