gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:56:51 25 4
gpt4 key购买 nike

我从这个问题开始: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 值排序到开头,并且所有 null 值均按正确的字母顺序排列,但所有其他 fin_date 值 (!null1 ) 不按字母顺序排列。它们也不按照 fin_date 排序。 fin_date 不等于 null 的对象似乎不按任何特定顺序排列。

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

谢谢!

最佳答案

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

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) 是 01 Jan 1970 00:00:00 GMT)。

这是一个jsFiddle .

关于javascript - 如何自定义排序 2D javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15254660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com