0

我从这个问题开始:如何对对象的 JS 对象进行排序?

从 2 条评论中,我想出了对对象的 Javascript 对象(只是一个 2D 对象)进行排序的最佳方法。

假设是一个 2D 对象变量,我按内部对象data的值排序。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) 不按字母顺序排列。他们不是按照fin_date任何一个顺序排列的。fin_date不等于的对象null似乎没有任何特定的顺序。

这就是我的问题:我需要带有fin-date!=的对象null按字母顺序排列。

谢谢!

4

1 回答 1

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

于 2013-03-06T18:26:18.837 回答