😙
文字列を日本語あいうえお順→英語a-z順にsortする方法
ただのあいうえお順だと、英語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