Skip to content

Instantly share code, notes, and snippets.

@dmitry-tuzenkov
Created December 19, 2023 20:45
Show Gist options
  • Save dmitry-tuzenkov/b1c6ed29ae1a0f9e959de730c4b55baa to your computer and use it in GitHub Desktop.
Save dmitry-tuzenkov/b1c6ed29ae1a0f9e959de730c4b55baa to your computer and use it in GitHub Desktop.
const versions = [
"0.4",
"0.11",
"0.4.1",
"0.4",
"0.4.2",
"2.0.1",
"2",
"0.0.1",
"0.2.3",
];
// 10.60.9 // +
// 10.6.1
// 10.6.1
type SemverVerType = [major: number, minor: number, patch: number]
const semverVerValue = (semverVersion: string): SemverVerType => {
const [major = 0, minor = 0, patch = 0] = semverVersion.split('.').map(Number)
return [major, minor, patch]
}
// const arr = [10, 5, 30, 2, 6].sort((a, b) => a - b)
const compareSemverVersion = (ver1: SemverVerType, ver2: SemverVerType, index: number = 0): number => {
if (ver1[index] !== ver2[index]) {
return ver2[index] - ver1[index]
} else if (ver1[index + 1]) {
return compareSemverVersion(ver1, ver2, index + 1)
}
return 0
}
function semverSort(sems: string[]): string[] {
const computed: Record<string, SemverVerType> = {}
for (const semverVer of sems) {
computed[semverVer] = semverVerValue(semverVer)
}
console.log('computed', computed)
return sems.sort(
(a: string, b: string) => compareSemverVersion(computed[a], computed[b])
);
}
console.clear();
console.log(JSON.stringify(semverSort(versions)));
// [ '0.0.1', '0.2.3', '0.4', '0.4', '0.4.1', '0.4.2', '0.11', '2', '2.0.1']
// ["0.0.1","0.2.3","0.4","0.4","0.4.1","0.4.2","0.11","2","2.0.1"]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment