数组对象按时间字符串排序(转载)

来源:https://blog.csdn.net/qq_41033913/article/details/90754217

data是数组,里面装了很多对象。way 指定正序反序,pms指定参数

 

 

//var data = sortData(data, "order", "YearAndMonth");//将整个数组所有对象,按照日期排序
//var xData = arrayObjectDistinctReturnKey(data, 'YearAndMonth'); //然后去重


var xData0 = arrayObjectDistinctReturnKey(data, 'YearAndMonth'); //先日期去重
var xData = sortData2(xData0, "order");//仅对日期排序

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//字符串 时间排序 正序、反序
function sortData(data, way,pms) {
    if (way == "order") {
        return data.sort(function (a, b) {
            //console.log(a,b);
            var c = Date.parse(a[pms].replace(/-/g, "/")) - Date.parse(b[pms].replace(/-/g, "/"));
            //console.log(c, Date.parse(a[pms].replace(/-/g, "/")), Date.parse(b[pms].replace(/-/g, "/")));
            //这里的time要根据本身的数据来,后面的正则匹配也要根据自己数据来
            return c;
        });
    } else if (way == "back") {
        return data.sort(function (a, b) {
            return Date.parse(b[pms].replace(/-/g, "/")) - Date.parse(a[pms].replace(/-/g, "/"));
        });
    }
}
 
function sortData2(data, way) {
    if (way == "order") {
        return data.sort(function (a, b) {
            //console.log(a, b);
            var c = Date.parse(a.replace(/-/g, "/")) - Date.parse(b.replace(/-/g, "/"));
            //console.log(c, Date.parse(a.replace(/-/g, "/")), Date.parse(b.replace(/-/g, "/")));
            //这里的time要根据本身的数据来,后面的正则匹配也要根据自己数据来
            return c;
        });
    } else if (way == "back") {
        return data.sort(function (a, b) {
            return Date.parse(b.replace(/-/g, "/")) - Date.parse(a.replace(/-/g, "/"));
        });
    }
 
}

  

1
Date.parse(a.replace(/-/g, "/"))  输出的是时间戳, a-b 是两个时间戳相减。<br><br>文档:https://www.w3school.com.cn/js/jsref_sort.asp

比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 对象数组去重 利用对象访问属性的方法,判断对象中是否存key
 function arrayObjectDistinctReturnKey(arr, key) {
     if (!Array.isArray) {
         Array.isArray = function (arg) {
             return Object.prototype.toString.call(arg) === '[object Array]';
         };
     }
     // console.log('arr', arr)
     var result = []
      
     if (arr != null && Array.isArray(arr) && arr.length > 0) {
         var obj = {}
         for (var i = 0; i < arr.length; i++) {
             if (arr[i][key]) {
                 if (!obj[arr[i][key]]) {
                     result.push(arr[i][key])
                     obj[arr[i][key]] = true
                 }
             }
         }
     }
 
 
     // console.log('result', result)
     return result
 }

 

  

 

posted @   hao_1234_1234  阅读(1000)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-01-12 'OFFSET' 附近有语法错误。 在 FETCH 语句中选项 NEXT 的用法无效。(转载)
2019-01-12 yarn install npm install (转载)
点击右上角即可分享
微信分享提示