gpt4 book ai didi

javascript - 在 Javascript 中按日期和时间对对象数组进行排序时出现问题 - 允许空值

转载 作者:行者123 更新时间:2023-12-02 17:26:07 26 4
gpt4 key购买 nike

我正在使用 Javascript 中的对象数组,需要按日期和时间对它们进行排序。设置如下:

地点

  • 标题
  • 日期(可选)
  • 时间(可选)

从概念上讲,该应用程序允许用户创建他们计划去的地方的列表。事件数组首先是手动排序的,用户可以选择向地点添加日期和时间值。我提供了一个按日期排序的按钮...日期为空的地点需要放置在列表的底部。

目前,它在不同浏览器中的表现有所不同。这是代码(假设我有 _places 数组和 _list 对象的句柄):

var _orderByDate = function (e) {
YUE.preventDefault(e); // yui
_places.sort(function (a, b) {
var dateA = new Date(a.date),
dateB = new Date(b.date);
if ((!dateA === null) && (dateB === null)) return 0; //they're both null and equal
else if ((dateA === null) && (dateB != null)) return -1; //move a downwards
else if ((dateA != null) && (dateB === null)) return 1; //move b downwards
else if ((dateA == dateB)) return (a.time > b.time) ? 1 : ((b.time > a.time) ? -1 : 0);
else return (dateA > dateB) ? 1 : ((dateB > dateA) ? -1 : 0);
});
_list.updatePlaces(_places);
}

如果您认识上面的排序代码,那是因为我从另一篇文章中获得了基础知识,但我觉得这篇文章值得拥有自己的内容,因为它处理日期......另一个只是处理空值和文本。

无论如何,在 Chrome 中,列表似乎按随机顺序排序,并且每次我执行 _orderByDate 函数时,它都会以不同的方式排序。在 Safari 中,第一次排序基本上是正确的,但会在列表顶部放置一个空日期位置。在 Firefox 中,什么也没有发生。

我是个初学者,而且我根本没有 CS 背景,所以我不擅长数组、日期、时间等基础知识……而且我的调试技能仅限于Firebug 控制台。没有报告任何错误,所以我真的不知道出了什么问题。

需要注意的一件事是,如果我从函数中删除日期类型,以便将项目作为字符串进行排序,它可以正常工作...但这意味着 1/10/2011 将在 1/9/2011 之前排序,所以我我想我需要其中的日期类型。

有什么想法出了什么问题吗?有没有更聪明的方法来完成我想做的事情?

编辑:添加日志值

第一次排序(Chrome):

  • 2010年8月1日
  • 2010年8月3日
  • 2010 年 7 月 1 日

第二个排序(Chrome):

  • 2010年8月1日
  • 2010年7月1日
  • 2010 年 8 月 3 日

最佳答案

[ See it in action ]

_places.sort(function (a, b) {
var dateA = new Date(a.date + a.time), // merge the date & time
dateB = new Date(b.date + b.time); // depending on the format
if (!a.date && b.date) return 1;
else if (a.date && !b.date) return -1;
else if (dateA === dateB) return 0;
else return (dateA > dateB) ? 1 : (dateB > dateA ? -1 : 0);
});

关于javascript - 在 Javascript 中按日期和时间对对象数组进行排序时出现问题 - 允许空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380096/

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