来源: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");//仅对日期排序
//字符串 时间排序 正序、反序 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, "/")); }); } }
Date.parse(a.replace(/-/g, "/")) 输出的是时间戳, a-b 是两个时间戳相减。
文档:https://www.w3school.com.cn/js/jsref_sort.asp
比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
// 对象数组去重 利用对象访问属性的方法,判断对象中是否存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 }