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

jai*_*ikl 1 javascript arrays sorting api time

我有一个对象数组,看起来像这样:

  • [0] = {运输号:“ 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。

我的问题是:我如何只能按时间排序此数组?

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

allBuses.sort(function(a,b){
var c = a.time;
var d = b.time;

if(c > d){
return d
}

else return c
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

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

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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)


Yos*_*ero 5

您可以使用Array.prototype。toSorted()解构赋值来对比较时间字符串进行排序:

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 sortedAllBuses = allBuses.toSorted(
  ({ time: a }, { time: b }) => a < b ? -1 : a > b ? 1 : 0
)

console.log(sortedAllBuses)
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)