Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对2D javascript对象进行自定义排序?_Javascript_Sorting_Javascript Objects - Fatal编程技术网

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

如何对2D javascript对象进行自定义排序?,javascript,sorting,javascript-objects,Javascript,Sorting,Javascript Objects,我从这个问题开始: 根据其中的两条评论,我提出了对Javascript对象进行排序的最佳方法(只是一个2D对象) 假设数据是一个2D对象变量,我按照内部对象的客户值进行排序 首先,我转换为对象数组,如下所示: data = $.map(data, function(k, v) { return [k]; }); data = data.sort(function(a, b){ return a.customer > b.customer? 1: -1; }); 然后我像

我从这个问题开始:

根据其中的两条评论,我提出了对Javascript对象进行排序的最佳方法(只是一个2D对象)

假设
数据
是一个2D对象变量,我按照内部对象的
客户
值进行排序

首先,我转换为对象数组,如下所示:

data = $.map(data, function(k, v) {
    return [k];
});
data = data.sort(function(a, b){
    return a.customer > b.customer? 1: -1;
});
然后我像这样进行排序:

data = $.map(data, function(k, v) {
    return [k];
});
data = data.sort(function(a, b){
    return a.customer > b.customer? 1: -1;
});
它工作得很好,但现在我想先按日期变量排序,然后再按客户变量排序。就像SQL中排序函数的工作方式一样(
…按日期描述排序,客户asc;

但是,我真正想做的其实要简单得多。对日期值进行排序时,我只想区分
null
!空值
值。结果是所有的空值将被分组在一起,而所有的非空值将被分组在一起

之后,所有顶级对象都应该按
customer
顺序排列

我是根据我认为它应该如何工作而提出这个想法的:

data = data.sort(function(a, b){
    if (a.fin_date !== null){
        return 1;
    }
    return a.customer > b.customer? 1: -1;
});
这是一种工作。它将所有的
null
值排序到开头,并且所有的null值按正确的字母顺序排列,但是所有其他的
fin\u date
值(
!null1
)不按字母顺序排列。根据
fin_date
,它们也不符合顺序。
fin_date
不等于
null
的对象似乎没有任何特定顺序

这就是我的问题:我需要具有
fin date
!=<代码>空按字母顺序排列


谢谢

你根本没有比较日期。尝试类似以下排序函数的操作:

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;
}
功能(a、b){
var aDate=新日期(a.fin_日期),
b日期=新日期(b.fin_日期);
if(aDatebDate)返回1;
返回a.customer>b.customer?1:-1;
}
这假设您的所有日期都晚于1970年(因为
新日期(null)
是1970年1月1日00:00:00 GMT)


这是一个。

我想你是说你在对一组对象进行排序,对吗?对象属性没有按任何顺序存储。是的,你说得对,我更新了上面的代码。