Javascript 如何对时刻时区列表进行排序?

Javascript 如何对时刻时区列表进行排序?,javascript,datetime,momentjs,moment-timezone,Javascript,Datetime,Momentjs,Moment Timezone,我想在下拉菜单中按升序显示时刻时区列表。默认情况下,它们按字母顺序排序。但是,我的要求是按照GMT的升序对它们进行排序 分拣前: [ '(GMT+00:00) Africa/Abidjan', '(GMT+00:00) Africa/Accra', '(GMT+03:00) Africa/Addis_Ababa', '(GMT+01:00) Africa/Algiers', '(GMT+03:00) Africa/Asmara', '(GMT+03:00) Africa/

我想在下拉菜单中按升序显示时刻时区列表。默认情况下,它们按字母顺序排序。但是,我的要求是按照GMT的升序对它们进行排序

分拣前:

[
  '(GMT+00:00) Africa/Abidjan',
  '(GMT+00:00) Africa/Accra',
  '(GMT+03:00) Africa/Addis_Ababa',
  '(GMT+01:00) Africa/Algiers',
  '(GMT+03:00) Africa/Asmara',
  '(GMT+03:00) Africa/Asmera',
  '(GMT+00:00) Africa/Bamako',
  '(GMT+01:00) Africa/Bangui',
]
排序后:

[
  '(GMT+00:00) Africa/Abidjan',
  '(GMT+00:00) Africa/Accra',
  '(GMT+00:00) Africa/Bamako',
  '(GMT+01:00) Africa/Algiers',
  '(GMT+01:00) Africa/Bangui',
  '(GMT+03:00) Africa/Addis_Ababa',
  '(GMT+03:00) Africa/Asmera',
  '(GMT+03:00) Africa/Asmara',
]


通过执行此操作,可以获得已排序的列表

const timeZones=moment.tz.names();
常量getTimeZoneList=()=>
时区地图(
(t,i)=>`(GMT${moment.tz(timeZones[i]).format(“Z”)})${timeZones[i]}`
);
常量sortByGmt=()=>{
const timeZone=getTimeZoneList();
返回时区。排序((a,b)=>{
常数re=/^\(GMT([+-]\d{1,2}):(\d{1,2}).$/;
const aOffset=parseFloat(a.replace(re,“$1.$2”));
const bOffset=parseFloat(b.replace(re,“$1.$2”));
返回aOffsetbOffset-1:0;
});
};
console.log(sortByGmt())

通过执行此操作,您可以获得已排序的列表

const timeZones=moment.tz.names();
常量getTimeZoneList=()=>
时区地图(
(t,i)=>`(GMT${moment.tz(timeZones[i]).format(“Z”)})${timeZones[i]}`
);
常量sortByGmt=()=>{
const timeZone=getTimeZoneList();
返回时区。排序((a,b)=>{
常数re=/^\(GMT([+-]\d{1,2}):(\d{1,2}).$/;
const aOffset=parseFloat(a.replace(re,“$1.$2”));
const bOffset=parseFloat(b.replace(re,“$1.$2”));
返回aOffsetbOffset-1:0;
});
};
console.log(sortByGmt())

比你的短,Ashik。无需从阵列访问时区两次

const getTimeZoneList=moment.tz.names()
.map(t=>`(GMT${moment.tz(t).format(“Z”)})${t}`);
常数sortByZone=(a,b)=>{
设[ahh,amm]=a.split(“GMT”)[1]。split(“)”[0]。split(“:”;
设[bhh,bmm]=b.split(“GMT”)[1]。split(“)”[0]。split(“:”;
返回(+ahh*60+amm)-(+bhh*60+bmm)
};
console.log(getTimeZoneList.sort(sortByZone))

比你的短,Ashik。无需从阵列访问时区两次

const getTimeZoneList=moment.tz.names()
.map(t=>`(GMT${moment.tz(t).format(“Z”)})${t}`);
常数sortByZone=(a,b)=>{
设[ahh,amm]=a.split(“GMT”)[1]。split(“)”[0]。split(“:”;
设[bhh,bmm]=b.split(“GMT”)[1]。split(“)”[0]。split(“:”;
返回(+ahh*60+amm)-(+bhh*60+bmm)
};
console.log(getTimeZoneList.sort(sortByZone))

如果我们有对象的矩.js时区数组(名称、值)或任何其他带有GMT值的对象时区数组,并且我们希望对GMT值对其应用排序,则此情况的解决方案。



然后我们可以按
timezones.sort( this.compare );

 compare( a, b ) {
     
    var first = a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(")"));
    first.replace(/^"+:"+$/g, '');

    var second = b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(")"));
    first.replace(/^"+:"+$/g, '');

    if ( parseFloat(first) < parseFloat(second) ){
        return -1;
      
    }
    if ( parseFloat(first) > parseFloat(second) ){
      return 1;
    }
    return 0;
  }
timezones.sort(this.compare);
比较(a,b){
var first=a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
var second=b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
if(parseFloat(第一)parseFloat(第二)){
返回1;
}
返回0;
}

如果我们有对象的矩.js时区数组(名称、值)或任何其他带有GMT值的对象时区数组,并且我们希望对GMT值对其应用排序,则此情况的解决方案。



然后我们可以按
timezones.sort( this.compare );

 compare( a, b ) {
     
    var first = a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(")"));
    first.replace(/^"+:"+$/g, '');

    var second = b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(")"));
    first.replace(/^"+:"+$/g, '');

    if ( parseFloat(first) < parseFloat(second) ){
        return -1;
      
    }
    if ( parseFloat(first) > parseFloat(second) ){
      return 1;
    }
    return 0;
  }
timezones.sort(this.compare);
比较(a,b){
var first=a.name.substring(a.name.indexOf('T')+1,a.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
var second=b.name.substring(b.name.indexOf('T')+1,b.name.indexOf(“)”);
首先,替换(/^“+:”+/$/g,”);
if(parseFloat(第一)parseFloat(第二)){
返回1;
}
返回0;
}

实际上,它是一个大数组。所以我没有给它。无论如何,现在它被编辑了。我认为它现在有意义了。实际上,它是一个大数组。所以我没有给它。无论如何,现在它被编辑了。我认为这是有道理的,不必要的复杂。看这里我没看到你回答了你自己的问题;)不必要的复杂。看这里我没看到你回答了你自己的问题;)