Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Intl.Collatorで五十音順に並べ替えることができない

Discussion

Closed

解決したいこと

JavaScriptのArrayの日本語のひらがなとカタカナを五十音順に並べ替えつつ、が、どうやっても、ひらがなとカタカナは一緒に並ぶ

例)

const unsorted = ["", "", "","ちゅ","", "B", "b", "A", "a"];

const collator = new Intl.Collator("ja", { caseFirst: "lower" });

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'カ', 'か', 'ちゅ', 'マ', 'ゆ']

発生している問題・エラー

なぜか、ひらがなとカタカナの順番が五十音順になっていない。

自分で試したこと

const collator = new Intl.Collator("ja", { sensitivity: 'base' });

unsorted.sort(collator.compare); // ['A', 'a', 'B', 'b', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("ja", {
    sensitivity: "accent"
});

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'カ', 'か', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("ja", {
    sensitivity: "case"
});

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("ja", {
    sensitivity: "variant"
});

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("japanese", {
    collation: "japanese"
});

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("en", {
    caseFirst: "upper",
});

unsorted.sort(collator.compare); // ['A', 'a', 'B', 'b', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("en", {
    caseFirst: "lower",
});

unsorted.sort(collator.compare); // ['a', 'A', 'b', 'B', 'か', 'カ', 'ちゅ', 'マ', 'ゆ']

const collator = new Intl.Collator("ja");

unsorted.sort(collator.compare); //  ['a', 'A', 'b', 'B', 'カ', 'か', 'ちゅ', 'マ', 'ゆ']

unsorted.sort(); // (9) ['A', 'B', 'a', 'b', 'か', 'ちゅ', 'ゆ', 'カ', 'マ']
// これはうまくいくのに....










0

五十音順になっていない。

とありますが、五十音順にはなっている気がします ('か', 'カ', 'ちゅ', 'マ', 'ゆ')

やりたいことは「平仮名 → 片仮名 の順にしつつ、その中で五十音順で並べたい」ですかね?

推測なんですが、 Intl.Collator("ja") では は同じベース文字として見なされていて、平仮名と片仮名を分離するのはできないのではないのでしょうか

無理矢理やるとしたら、 Intl.Collator と正規表現を組み合わせつつ独自の比較関数を作るかな〜と思います

1Like

なるほど!五十音順ではなく、JIS順のことと勘違いしていました!ありがとうございます。

0Like

Your answer might help someone💌