我从这个问题开始:How to sort a JS object of objects?
我从2条评论中得出了最好的方法来对对象的Javascript对象进行排序(只是一个2D对象)。
假设data
是一个2D对象变量,我按内部对象的customer
值排序。
首先我转换为一个对象数组,如下所示:
data = $.map(data, function(k, v) {
return [k];
});
然后我按照这样排序:
data = data.sort(function(a, b){
return a.customer > b.customer? 1: -1;
});
效果很好,但现在我想首先按日期变量排序,然后按客户变量排序。就像排序函数在SQL中的工作方式一样(...sort by date desc, customer asc;
)。
但是,我真正想做的事情实际上要简单得多。排序日期值时,我想要做的就是区分null
和!null
值。结果是将所有空值组合在一起,并将所有非空值组合在一起。
之后,所有顶级对象都应该是customer
顺序。
根据我认为应该如何运作,我提出了这个想法:
data = data.sort(function(a, b){
if (a.fin_date !== null){
return 1;
}
return a.customer > b.customer? 1: -1;
});
有点工作。它将所有null
值排序为开头,并且所有空值都按正确的字母顺序排列,但所有其他fin_date
值(!null1
)不按字母顺序排列。根据{{1}},它们也没有按顺序排列。 fin_date
不等于fin_date
的对象似乎没有任何特定顺序。
这就是我的问题:我需要null
!= fin-date
的对象按字母顺序排列。
谢谢!
答案 0 :(得分:2)
你根本没有比较日期。尝试类似这样的排序功能:
function(a, b) {
var aDate = new Date(a.fin_date),
bDate = new Date(b.fin_date);
if (aDate < bDate) return -1;
else if (aDate > bDate) return 1;
return a.customer > b.customer ? 1: -1;
}
这假定您的所有日期都晚于1970年(因为new Date(null)
是1970年1月1日00:00:00 GMT)。
这是jsFiddle。