ダッシュで奪取

ゲーム、読書、人生

【JavaScript】配列の値を任意の順番で並び替えたい

やりたいこと

  • 以下のポケモン配列を、全国図鑑順に並び替えたい
    • フシギダネ → ヒトカゲ → ゼニガメ → ピカチュウの順が正解
const pokemons = ["ヒトカゲ", "ゼニガメ", "フシギダネ", "ピカチュウ"];

NG

  • とりあえず sort() してみた
    • Unicode コードポイント順に並んでいるらしい
    • 今回の対象はカタカナだけなので、結果50音順で並んだ
const pokemons = ["ヒトカゲ", "ゼニガメ", "フシギダネ", "ピカチュウ"];

pokemons.sort();
console.log(pokemons); // [ 'ゼニガメ', 'ヒトカゲ', 'ピカチュウ', 'フシギダネ' ] フシギダネが最初に来てほしいのでNG

OK

  • 並び順マスタ的なものを作る orderList
  • Array.prototype.sort() - JavaScript | MDN の「compareFn(a, b) の返値」表より、(a, b) の結果が正の数である場合、a と b の順番が入れ替わる
const orderList = ["フシギダネ", "フシギソウ", "フシギバナ", "ヒトカゲ", "リザード", "リザードン", "ゼニガメ", "カメール", "カメックス", "ピカチュウ", "ライチュウ"];
const pokemons = ["ヒトカゲ", "ゼニガメ", "フシギダネ", "ピカチュウ"];

pokemons.sort((a, b) => 
    orderList.indexOf(a) - orderList.indexOf(b)
);

console.log(pokemons); // [ 'フシギダネ', 'ヒトカゲ', 'ゼニガメ', 'ピカチュウ' ]

参考URL