【问题标题】:how to custom sort a 2D javascript object?如何自定义排序 2D javascript 对象?
【发布时间】:2013-02-21 16:12:54
【问题描述】:

我从这个问题开始:How to sort a JS object of objects?

从 2 个 cmets 中,我想出了对对象的 Javascript 对象(只是一个 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 的对象按字母顺序排列。

谢谢!

【问题讨论】:

  • 我假设您的意思是您正在对一个 array 对象进行排序,对吧?对象属性不按任何顺序存储。
  • 是的,你是对的,我更新了上面的代码。

标签: javascript sorting javascript-objects


【解决方案1】:

您根本没有比较日期。试试这样的排序功能:

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

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    相关资源
    最近更新 更多