将数组按照时间重新降序排序

在写笔记列表页面时,发现从服务器获取的笔记列表包含最新更新时间 lastts,当我们想将最新更新的条目展示在最上端时,我们需要排序数组,将数组按照时间重新排序,排序规则为最新的时间条目放在最前面。

这样我们就可以在笔记列表中让用户看到最新更新的内容了。

我们需要将其封装为函数,方便调用。

函数代码如下:

// 按照更新时间排序的函数
  sortNotesByLastTs: function(notes) {
    return notes.slice().sort((a, b) => {
      // 将时间字符串转为时间戳比较
      const timeA = new Date(a.lastts).getTime();
      const timeB = new Date(b.lastts).getTime();

      // 降序排列(最新的在前)
      return timeB - timeA;
    });
  },

当运行之后,发现时间戳格式和服务器返回格式不一致,我们需要重新调整函数,服务器返回格式 YYYY-MM-DD HH:mm:ss,本地函数使用的时间格式 ISO 8601 格式。

调整后的代码如下:

// 按照更新时间排序的函数(适配"YYYY-MM-DD HH:mm:ss"格式)
  sortNotesByLastTs: function(notes) {
    return notes.slice().sort((a, b) => {
      // 解析自定义时间格式
      const parseTime = (timeStr) => {
        if (!timeStr) return 0;

        // 替换空格为T,使其符合ISO格式
        const isoFormat = timeStr.replace(' ', 'T');
        return new Date(isoFormat).getTime() || 0;
      };

      const timeA = parseTime(a.lastts);
      const timeB = parseTime(b.lastts);

      // 降序排列(最新的在前)
      return timeB - timeA;
    });
  },

推荐还是调整服务器端,让返回的时间格式转为 ISO 8601 格式。