😙

文字列を日本語あいうえお順→英語a-z順にsortする方法

2024/03/22に公開

ただのあいうえお順だと、英語a-z順→日本語あいうえお順になってしまう。
localCompare()は、特定の地域の言語環境に基づき文字列を比較する。

const area = ["東京","tokyo","大阪","osaka","名古屋","nagoya"];

const sortedArea = area.sort((a, b) => a.name.localeCompare(b.name));

console.log(sortedArea); // => ["nagoya","osaka","tokyo","大阪","東京","名古屋"]

日本語を判定するより英語を判定する方が楽なので、
英語か否かで判別し、3パターンに分けて並び替える。

const area = ["東京","tokyo","大阪","osaka","名古屋","nagoya"];

const sortedArea = area.sort((a, b) => {
  // 日本語と英語を判別
  const isEnglishA = /^[a-zA-Z0-9]*$/.test(a.name);
  const isEnglishB = /^[a-zA-Z0-9]*$/.test(b.name);

  // 両方日本語または両方英語の場合
  if (isEnglishA === isEnglishB) return a.name.localeCompare(b.name);
  // aが日本語、bが英語の場合
  if (!isEnglishA && isEnglishB) return -1;
  // aが英語、bが日本語の場合
  return 1;
});

console.log(sortedArea); // => ["大阪","東京","名古屋","nagoya","osaka","tokyo"]

おわり。

Discussion