I am trying to sort ad display my time zone array. But getting no result.
array order is:
(GMT) Monrovia, Reykjavik
(GMT-01:00) Cape Verde Islands
(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
required order is: (GMT- first, then GMT after GMT+)
(GMT-01:00) Cape Verde Islands
(GMT) Monrovia, Reykjavik
(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
code:
import { useEffect, useState } from "react";
import "./styles.css";
const array = [
{
defaultOrder: 40,
label: "(GMT) Monrovia, Reykjavik",
codeId: 1220,
code: "GMT02",
codeDesc: "(GMT) Monrovia, Reykjavik",
codeQualifier: "Time_Zone_Cd"
},
{
defaultOrder: 41,
label: "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
codeId: 297,
code: "CET",
codeDesc: "(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
codeQualifier: "Time_Zone_Cd"
},
{
defaultOrder: 34,
label: "(GMT-01:00) Cape Verde Islands",
codeId: 1218,
code: "CVT",
codeDesc: "(GMT-01:00) Cape Verde Islands",
codeQualifier: "Time_Zone_Cd"
}
];
const SortTimezoneCompare = (data: any[]) => {
return data.sort((a, b) => {
var first = a.label.substring(
a.label.indexOf("T") + 1,
a.label.indexOf(")")
);
first.replace(/^"+:"+$/g, "");
var second = b.label.substring(
b.label.indexOf("T") + 1,
b.label.indexOf(")")
);
first.replace(/^"+:"+$/g, "");
if (parseFloat(first) < parseFloat(second)) {
return -1;
}
if (parseFloat(first) > parseFloat(second)) {
return 1;
}
return 0;
});
};
export default function App() {
const [timeZone, setTimeZone] = useState<any[] | null>(null);
useEffect(() => {
const sorted = SortTimezoneCompare(array);
setTimeZone(sorted);
}, []);
return (
<div className="App">
<ul>{timeZone && timeZone.map((v) => <li>{v.label}</li>)}</ul>
</div>
);
}