Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何根据我的情况实现这些排序功能_Javascript_String_Typescript_Sorting_Object - Fatal编程技术网

Javascript 如何根据我的情况实现这些排序功能

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

嘿,请不要因为我不知道“基本知识”或其他什么而马上关闭我,如果我在这里发帖,那是因为我已经试了两个小时来做这个简单的事情,我真的不能并且需要帮助

我使用了这个线程的顶部帖子,还有一些帖子,它从不根据我指出的属性对我的对象数组进行排序,我不知道我是否遗漏了什么 这就是我的对象数组的样子,我想按Horainical属性对它们进行排序,这是一个保持iso 8601的字符串

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的时间值不按排序