🐝

【TS】バージョン比較用関数について

に公開
3

Discussion

standard softwarestandard software

rana さんの記事にもコメントしましたが、
面接に出てた例ならば大丈夫ですが
上記コードだと、1.1.1a と、1.1.1b と 1.1.1A とを区別できない感じがします。
まあそんな変なバージョン記述する方がわるいとは言えるのですけれども。

ともかく、1.1.a でも、1.1.1a でも比較できるバージョン情報ソート関数書きましたのでご参考にでもどうぞ。

バージョン情報ソートができないと面接に落ちるので解答しとく - Qiita
https://qiita.com/standard-software/items/acc24c27be222a6f1b20#comment-89ee78d8078b634eea11

rithmetyrithmety

翻訳元のコメントにも書かれていた解法ですが
もっとシンプルに書けると思います

上記の standard software さんの記事内の versions と output で
動作確認した感じでは正しく動きます

const sortVersions = (/** @type {string[]} */ unsortedVersions) => {
  return unsortedVersions
    .slice()
    .sort((q, w) => w.localeCompare(q, [], { numeric: true }))
}
nekonikinekoniki

お二方ともコメントありがとうございます!
自分も文字列込みのバージョン表記にどうやって対応しようかと考えておりましたが、提示いただいた記事・コードなら確かに対応できそうです。

お恥ずかしながらlocaleCompareは初見だったので大変参考になりました。
一通りまとめさせていただいて、記事に追記という形で紹介させていただきたいと思います。