我想对对象数组进行排序。我的对象中有日期我想对对象的日期进行排序
我用这个答案来解决我的问题 why array is not sorted in javascript in increasing date or decreasing date?
但是当使用此解决方案时,它无效。
我进行ajax调用并从服务器存储中获取数据。但是数据 2000 ,因此很难检查数据是否排序。
所以我会告诉你数据不是排序的证据。
https://jsfiddle.net/rxaLutgn/6/
function sort_by(field, reverse, primer) {
var key = primer ?
function (x) {
return primer(x[field])
} :
function (x) {
return x[field]
};
reverse = !reverse ? 1 : -1;
return function (a, b) {
a = new Date(key(a)), b = new Date(key(b));
return reverse * (a-b);
}
}
关于这个问题的任何更新。下面的回答不起作用
答案 0 :(得分:0)
如果您期望所有日期,该功能正常。查看您的数据有一些无效日期,例如" - "
如果您无法修改数据或期望确定日期,那么您需要修改您的功能以执行此类操作(或以某种方式按照您的喜好处理它)
function sort_by(field, reverse, primer) {
var key = primer ?
function (x) {
return primer(x[field])
} :
function (x) {
return x[field]
};
reverse = !reverse ? 1 : -1;
return function (a, b) {
a = new Date(key(a))=='Invalid Date'?0:new Date(key(a));
b = new Date(key(b))=='Invalid Date'?0:new Date(key(b));
return reverse * (a-b);
}
}
https://jsfiddle.net/rxaLutgn/21/< - 看看这里插入严重排序以限制数据量的对象
答案 1 :(得分:0)
这是一个有效的解决方案,我没有像你那样包含底漆。但实施它应该很容易。
$.ajax({
url: "https://dl.dropboxusercontent.com/s/3v7ya481187k8gf/a.json?dl=0",
}).done(function(data) {
var arr;
var _key = "Expected_Payment_Date__c";//"akritiv__Promise_Date__c",
var _reverse = true;
arr=JSON.parse(data);
arr.sort(function(a,b){
var keyA = Date.parse(a[_key]);
var keyB = Date.parse(b[_key]);
var _rev = _reverse ? -1 : 1;
if(keyA < keyB) return _rev * -1;
if(keyA > keyB) return _rev * 1;
return 0;
});
console.log(arr);
});