💬

たまたま見つけた記事のお題を自分だったらどう書くか書いてみた

2022/06/21に公開

見かけた記事

お題はバージョンナンバーの配列を並び替える。

https://zenn.dev/nekoniki/articles/c9c4584bc463e593cb94

これを、

const version = ['2.5.10.4159',
 '1.0.0',
 '0.5',
 '0.4.1',
 '1',
 '1.1',
 '0.0.0',
 '2.5.0',
 '2',
 '0.0',
 '2.5.10',
 '10.5',
 '1.25.4',
 '1.2.15'];

こんな風に並び替える。

const sorted = ["0.0",
"0.0.0",
"0.4.1",
"0.5",
"1",
"1.0.0",
"1.1",
"1.2.15",
"1.25.4",
"2",
"2.5.0",
"2.5.10",
"2.5.10.4159",
"10.5",
]

自分が書いたもの。
ドットで区切られた数字を配列に変更してそれぞれの桁を再帰的に比較しているだけです。

TypeScript
function compare(a: string[], b: string[], index: number = 0): number {
	if((+a[index] || 0) === (+b[index] || 0)) {
		index ++;
		if(Math.max(a.length, b.length) === index)
			return a.length - b.length;
		return compare(a, b, index);	
	}
	return (+a[index] || 0) > (+b[index] || 0) ? 1 : -1;
}

const sortMachine = (unsorted: string[]): string[] => unsorted.map(v => v.split('.')).sort((a, b) => {
	return compare(a, b);
}).map(o => o.join('.'));
JavaScript
function compare(a, b, index = 0) {
	if((+a[index] || 0) === (+b[index] || 0)) {
		index ++;
		if(Math.max(a.length, b.length) === index)
			return a.length - b.length;
		return compare(a, b, index);	
	}
	return (+a[index] || 0) > (+b[index] || 0) ? 1 : -1;
}

const sortMachine = (unsorted) => unsorted.map(v => v.split('.')).sort((a, b) => {
	return compare(a, b);
}).map(o => o.join('.'));

ただそれだけ。

Discussion