Javascript 如何根据我的情况实现这些排序功能
嘿,请不要因为我不知道“基本知识”或其他什么而马上关闭我,如果我在这里发帖,那是因为我已经试了两个小时来做这个简单的事情,我真的不能并且需要帮助 我使用了这个线程的顶部帖子,还有一些帖子,它从不根据我指出的属性对我的对象数组进行排序,我不知道我是否遗漏了什么 这就是我的对象数组的样子,我想按Horainical属性对它们进行排序,这是一个保持iso 8601的字符串Javascript 如何根据我的情况实现这些排序功能,javascript,string,typescript,sorting,object,Javascript,String,Typescript,Sorting,Object,嘿,请不要因为我不知道“基本知识”或其他什么而马上关闭我,如果我在这里发帖,那是因为我已经试了两个小时来做这个简单的事情,我真的不能并且需要帮助 我使用了这个线程的顶部帖子,还有一些帖子,它从不根据我指出的属性对我的对象数组进行排序,我不知道我是否遗漏了什么 这就是我的对象数组的样子,我想按Horainical属性对它们进行排序,这是一个保持iso 8601的字符串 Array(3) 0: Appointment area: "S. Eter" data: "2019-05-23T12:40:5
Array(3)
0: Appointment
area: "S. Eter"
data: "2019-05-23T12:40:55.155+01:00"
description: "Sprint CS WEB"
horaFinal: "2019-05-21T11:40:59.028Z"
horaInicial: "2019-05-21T11:40:59.028Z"
id: 17
__proto__: Object
1: Appointment
area: "S. Confiança"
data: "2019-05-23T12:40:55.155+01:00"
description: "AR"
horaFinal: "2019-05-21T16:45:15.448+01:00"
horaInicial: "2019-05-21T16:00:15.448+01:00"
id: 18
__proto__: Object
2: Appointment
area: "djdndjsnsnsnzznj"
data: "2019-05-23T11:18:24.596+01:00"
description: "xbxnxnsnsjsjdjdkssjdjsjsk"
horaFinal: "2019-05-22T10:42:46.770Z"
horaInicial: "2019-05-22T11:41:46.769+01:00"
id: 23
__proto__: Object
然后我尝试用另一个线程中的函数对其进行排序,如:
this.appointments.sort(function(a, b) {
var textA = a.horaInicial.toUpperCase();
var textB = b.horaInicial.toUpperCase();
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
});
console.log(this.appointments);
this.appoints.sort(函数(a,b){
var textA=a.horainical.toUpperCase();
var textB=b.horainical.toUpperCase();
返回(textAtextB)?1:0;
});
console.log(this.appoints);
约会数组的结果是相同的
我到底错过了什么
您不是在分析。这意味着您所做的是比较字符串。不是约会
为了使用JavaScript函数并接收预期的输出,您需要解析其中的日期。要按对象时间对它们进行排序,可以执行以下操作:
yourArray.sort(function(a,b){
return new Date(b.horaInicial) - new Date(a.horaInicial);
});
这将返回按日期排序的desc数组,因此要将其转换为asc,您只需使用yourArray.reverse()
看一个例子:
让你的数组=[
{
区域:“S.Eter”,
数据:“2019-05-23T12:40:55.155+01:00”,
描述:“Sprint CS WEB”,
小时决赛:“2019-05-21T11:40:59.028Z”,
时间:“2019-05-21T11:40:59.028Z”,
身份证号码:17
},
{
地区:“S.Confiança”,
数据:“2019-05-23T12:40:55.155+01:00”,
说明:“AR”,
小时决赛:“2019-05-21T16:45:15.448+01:00”,
时间:“2019-05-21T16:00:15.448+01:00”,
身份证号码:18
},
{
区域:“DJDNDJSNSNZNJ”,
数据:“2019-05-23T11:18:24.596+01:00”,
说明:“XBXNXNSJSJDKSSJDSJSSK”,
小时决赛:“2019-05-22T10:42:46.770Z”,
时间:“2019-05-22T11:41:46.769+01:00”,
身份证号码:23
}
];
//在对数组排序之前
文件。写(“之前:
”;
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});
//对数组进行排序
yourArray.sort(函数(a,b){
返回新日期(b.horainical)-新日期(a.horainical);
});
//在对数组排序之后
文档。在描述后写(
);
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});
//反向阵列
yourArray.reverse();
//排序和反转数组后
文件。在asc后写(
);
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});代码>
您不是在分析。这意味着您所做的是比较字符串。不是约会
为了使用JavaScript函数并接收预期的输出,您需要解析其中的日期。要按对象时间对它们进行排序,可以执行以下操作:
yourArray.sort(function(a,b){
return new Date(b.horaInicial) - new Date(a.horaInicial);
});
这将返回按日期排序的desc数组,因此要将其转换为asc,您只需使用yourArray.reverse()
看一个例子:
让你的数组=[
{
区域:“S.Eter”,
数据:“2019-05-23T12:40:55.155+01:00”,
描述:“Sprint CS WEB”,
小时决赛:“2019-05-21T11:40:59.028Z”,
时间:“2019-05-21T11:40:59.028Z”,
身份证号码:17
},
{
地区:“S.Confiança”,
数据:“2019-05-23T12:40:55.155+01:00”,
说明:“AR”,
小时决赛:“2019-05-21T16:45:15.448+01:00”,
时间:“2019-05-21T16:00:15.448+01:00”,
身份证号码:18
},
{
区域:“DJDNDJSNSNZNJ”,
数据:“2019-05-23T11:18:24.596+01:00”,
说明:“XBXNXNSJSJDKSSJDSJSSK”,
小时决赛:“2019-05-22T10:42:46.770Z”,
时间:“2019-05-22T11:41:46.769+01:00”,
身份证号码:23
}
];
//在对数组排序之前
文件。写(“之前:
”;
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});
//对数组进行排序
yourArray.sort(函数(a,b){
返回新日期(b.horainical)-新日期(a.horainical);
});
//在对数组排序之后
文档。在描述后写(
);
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});
//反向阵列
yourArray.reverse();
//排序和反转数组后
文件。在asc后写(
);
yourArray.forEach((i)=>{
文件。书写(新日期(i.horainical)+“
”;
});代码>为什么要使用字母数字比较对时间戳排序?将它们转换为历元时间戳,然后使用生成的数字进行排序
1.将时间戳转换为历元-
arr2 = arr.map(item => {
item.horaInicialEpoch = new Date(item.horaInicial).getTime();
return item;
})
基于时间的排序
arr2.sort((a,b)=>a.horaInicialEpoch-b.horaInicialEpoch)
注:只有当您需要将时间呈现给人类使用时,才使用时间的字符串表示。以编程方式使用datetime时,请使用自历元起的秒数。为什么要使用字母数字比较对时间戳排序?将它们转换为历元时间戳,然后使用生成的数字进行排序
1.将时间戳转换为历元-
arr2 = arr.map(item => {
item.horaInicialEpoch = new Date(item.horaInicial).getTime();
return item;
})
基于时间的排序
arr2.sort((a,b)=>a.horaInicialEpoch-b.horaInicialEpoch)
注:只有当您需要将时间呈现给人类使用时,才使用时间的字符串表示。当以编程方式使用datetime时,使用从epoch开始的秒数。您不需要toUpperCase
是的,我想按升序执行。我尝试了stack中的不同函数,但都不起作用,我真的不在乎它是什么样子,也不在乎它需要或不需要什么我只想完成它,我怎么会在排序一个简单数组时遇到这么多麻烦:\Appoints数组似乎已经按照您的规范进行了排序。我还注意到您的时间值不都在同一时区,您不能对它们进行字符串排序并使其与时区相一致。@James nop,0-11:40:59、1-16:00:15和2-11:41:46的时间值不按排序