【发布时间】: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