javascript - 有没有更有效的方法来对对象中的数组中的数组进行排序?

标签 javascript arrays sorting object controls

对于以下array-object-thing结构:

Events : {
    events : [
        {
          startDTG : {day: 0, month: 0, year: 0, time: "" },
          endDTG : {day: 0, month: 0, year: 0, time: "" },
          mode: ""
        },
        ...
    ],
    blah...,
    blah...,
    blah...
}

我正在努力寻找一种更有效的方法来根据 startDTG 键(日期时间组)对 events 对象进行排序。目前我使用以下方法,但我觉得必须有更好的方法来做到这一点!

SortEvents: function() {
    this.Events.events.sort(function(a, b){return a.startDTG.time - b.startDTG.time});
    this.Events.events.sort(function(a, b){return a.startDTG.day - b.startDTG.day});
    this.Events.events.sort(function(a, b){return a.startDTG.month - b.startDTG.month});
    this.Events.events.sort(function(a, b){return a.startDTG.year - b.startDTG.year});
},

编辑1:愿望按年>月>日>时间排序

我正处于一个关键时刻,为了提高效率,我必须放弃这个自定义 DTG。如果需要,我可以发布整个代码,但可能没有完全意义,因为它是为在名为“Medialon”的专有控制系统中工作而编写的 JS

编辑 2:在下面添加了一个快速制作的 JSON 代码转储,以帮助提高结构的可读性。忽略它们都是“字符串”的事实,这就是 Medialon 字符串化以实现持久性的方式

{
  "events": [
    {
      "startDTG": {
        "day": "8",
        "month": "2",
        "year": "2019",
        "time": "06:35",
        "dayName": "5"
      },
      "endDTG": {
        "day": "9",
        "month": "2",
        "year": "2019",
        "time": "08:35",
        "dayName": "6"
      },
      "mode": "1"
    },
    {
      "startDTG": {
        "day": "27",
        "month": "2",
        "year": "2019",
        "time": "17:35",
        "dayName": "3"
      },
      "endDTG": {
        "day": "28",
        "month": "2",
        "year": "2019",
        "time": "06:35",
        "dayName": "4"
      },
      "mode": "1"
    },
    {
      "startDTG": {
        "day": "1",
        "month": "2",
        "year": "2019",
        "time": "14:35",
        "dayName": "5"
      },
      "endDTG": {
        "day": "2",
        "month": "2",
        "year": "2019",
        "time": "12:35",
        "dayName": "6"
      },
      "mode": "1"
    }
  ],

最佳答案

我仍然不太确定你的数据结构,但类似这样的东西应该很接近:

const events = [
  {name: 'a', startDTG: {year: 2019, month: 1,  day: 4,  time: '14:21:46'}, endDTG: ''},
  {name: 'b', startDTG: {year: 2018, month: 10, day: 7,  time: '12:13:59'}, endDTG: ''},
  {name: 'c', startDTG: {year: 2019, month: 1,  day: 4,  time: '09:23:51'}, endDTG: ''},
  {name: 'd', startDTG: {year: 2019, month: 1,  day: 2,  time: '15:02:36'}, endDTG: ''},
  {name: 'e', startDTG: {year: 2017, month: 9,  day: 17, time: '03:25:29'}, endDTG: ''},
  {name: 'f', startDTG: {year: 2017, month: 9,  day: 17, time: '03:25:28'}, endDTG: ''},
  {name: 'g', startDTG: {year: 2018, month: 4,  day: 14, time: '11:07:42'}, endDTG: ''},
]

events.sort((
  {startDTG: {year: y1, month: m1, day: d1, time: t1}}, 
  {startDTG: {year: y2, month: m2, day: d2, time: t2}}
) => 
  // y1 - y2 || m1 - m2 || d1 - d2 || (t1 < t2 ? -1 : t1 > t2 ? 1 : 0)           
  y1 - y2 || m1 - m2 || d1 - d2 || t1.localeCompare(t2)
)

console.log(events)

关于javascript - 有没有更有效的方法来对对象中的数组中的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54524338/

相关文章:

php - Web 应用程序 - 生物识别系统连接

javascript - 如何检查字符串是否是数组中任何元素的子字符串

c# - 对 List<Tuple<string, Class>> 按字母顺序对元组的字符串值进行排序,C#

java - 堆排序堆方法不起作用?

javascript - 为什么我的 js 脚本在从文件引用时无法加载,但在本地使用时却可以工作?

javascript - 电子电路图组件连接算法

c - 从 C 中的字符串填充二维整数数组

javascript - 如何将两个数组压缩到一个包含值的字符串数组中

php - 在 array_walk_recursive 中取消设置不起作用

c++ - STL 或 Boost 能否帮助按值对 map 进行排序?