首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在javascript中按时间对对象数组进行排序

如何在javascript中按时间对对象数组进行排序
EN

Stack Overflow用户
提问于 2017-01-16 09:57:40
回答 8查看 24.3K关注 0票数 8

我有一个类似于这样的对象数组:

  • ={交通号码:'45',时间:'10:28:00',日期:“2017-01-16”}
  • 1={交通号码:'45',时间:'10:38:00',日期:“2017-01-16”}
  • 2={交通号码:'45',时间:'10:48:00',日期:“2017-01-16”}
  • 3={交通号码:'14',时间:'10:12:00',日期:“2017-01-16”}
  • 4={交通号码:'14',时间:'10:24:00',日期:“2017-01-16”}
  • 5={交通号码:'14',时间:'10:52:00',日期:“2017-01-16”}

对象数组看起来总是像这个未排序的。首先是运输号码,然后是时间。这要归功于我正在使用的api。

我的问题是:如何只按时间对这个数组进行排序?

我尝试使用排序函数,如下所示,在存储对象数组的变量上,但没有成功:

代码语言:javascript
运行
复制
allBuses.sort(function(a,b){
var c = a.time;
var d = b.time;

if(c > d){
return d
}

else return c
EN

回答 8

Stack Overflow用户

发布于 2017-01-16 10:00:50

您可以将time视为字符串,并使用String#localeCompare进行排序。

代码语言:javascript
运行
复制
var data = [{ transportnumber: '45', time: '10:28:00', date:"2017-01-16"}, { transportnumber: '45', time: '10:38:00', date:"2017-01-16" },{ transportnumber: '45', time: '10:48:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:12:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:24:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:52:00', date:"2017-01-16"}];

data.sort(function (a, b) {
    return a.time.localeCompare(b.time);
});

console.log(data);
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 24
EN

Stack Overflow用户

发布于 2017-01-16 10:06:02

您可以使用Array.prototype.sort()来比较时间之外的数字:

代码语言:javascript
运行
复制
const allBuses = [{ transportnumber: '45', time: '10:28:00', date:"2017-01-16"}, { transportnumber: '45', time: '10:38:00', date:"2017-01-16" },{ transportnumber: '45', time: '10:48:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:12:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:24:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:52:00', date:"2017-01-16"}]

const getNumber = t => +t.replace(/:/g, '')
allBuses.sort(({ time: a }, { time: b }) => getNumber(a) - getNumber(b))

console.log(allBuses)
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

此外,您还可以使用Array.prototype.sort()比较时间字符串:

代码语言:javascript
运行
复制
const allBuses = [{ transportnumber: '45', time: '10:28:00', date:"2017-01-16"}, { transportnumber: '45', time: '10:38:00', date:"2017-01-16" },{ transportnumber: '45', time: '10:48:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:12:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:24:00', date:"2017-01-16" }, { transportnumber: '14', time: '10:52:00', date:"2017-01-16"}]

allBuses.sort(({ time: a }, {time: b }) => a > b ? 1 : a < b ? -1 : 0)

console.log(allBuses)
代码语言:javascript
运行
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 4
EN

Stack Overflow用户

发布于 2017-01-16 10:03:48

您将返回cd,这是时间值。你的功能需要返回..。

  • 如果值相同,则为0
  • 如果b低于a,则为正(>0)。1)
  • 如果a低于b,则为负(<0)。-1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41673669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档