如何自定义排序2D javascript对象?

时间:2013-03-06 18:02:12

标签: javascript sorting javascript-objects

我从这个问题开始: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的对象按字母顺序排列。

谢谢!

1 个答案:

答案 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