質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

567閲覧

ひらがなの頭文字でのフィルタリング方法について

hobby2018

総合スコア22

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/02/10 15:48

編集2019/02/10 16:25

ひらがなの頭文字を選択するとその対象が表示される
ような処理が含まれるwebアプリをjavascriptで作っています。
濁音や半濁音の頭文字はありません。

例えば、「あいうえお」の「あ」をクリックすると「あ」から
始まるひらがなの学校名が出てきます。

「はひふへほ」の「へ」を選択した場合に「べっぷしょうがっこう」
などの「べ」にマッチさせる場合に何かうまい方法はないでしょうか?

現在は、手作業でswitch文にて変換処理を噛ませて判定して
おります。

Javascript

1switch (char) { 2  case 'ぎ': 3 char = 'き'; 4 break; 5 case 'じ': 6 char = 'し'; 7 break; 8 case 'ぷ': 9 char = 'ふ'; 10 break; 11 default: 12 break; 13}

追記
データは連想配列の配列で持っています。

Array[{name: "名前", furigana:"ひらがなのふりがな"}, {name: "名前", furigana:"びらがなのふりがな"}, {name: "名前", furigana:"あひらがなのふりがな"}, {name: "名前", furigana:"いひらがなのふりがな"}, ・・・]

上記配列に対して、「ひ」から{name: "名前", furigana:"ひらがなのふりがな"}, {name: "名前", furigana:"びらがなのふりがな"}のように取り出したいです。

現状は、furiganaの1文字目が「び」だったらswitch文で「ひ」に変換して
マッチするかどうかをみています。「び」をいちいち「ひ」にする処理がいまいちで
網羅的に手作業で作らないといけないですし。何かよい手はないかと。

ネット銀行で、あいうえおの表をクリックすると銀行名が出てきますが
濁音で始まる銀行名はどうやってマッチさせているのか?うまい方法は
あるのかといった疑問です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2019/02/10 16:00

「「あ」をクリックすると「あ」から始まるひらがなの学校名が出てきます。 」をどう実現しているかによるのでは。絞り込み方法の概要がわかるコードとデータをどう持っているかなど、質問文に追記していただけませんか?
guest

回答2

0

ベストアンサー

javascript

1const 2 M = new Map, 3 D = [ 4 {name: "名前1", furigana:"ひらがなのふりがな"}, 5 {name: "名前2", furigana:"びらがなのふりがな"}, 6 {name: "名前3", furigana:"あひらがなのふりがな"}, 7 {name: "名前4", furigana:"いひらがなのふりがな"} 8 ]; 9 10'かが きぎ くぐ けげ こご さざ しじ すず せぜ そぞ ただ ちぢ つづ てで とど はばぱ ひびぴ ふぶぷ へべぺ ほぼぽ' 11 .split (/\s/g).forEach (a => M.set (a[0], new RegExp ('^(' + a.split ('').join ('|') + ')'))); 12 13function getReg (f) { 14 return M.has (f) ? M.get (f): new RegExp ('^' + f); 15} 16 17 18let rst = D.filter (function (a) { return this.test (a.furigana) }, getReg ('ひ')); 19console.log (rst); 20

投稿2019/02/10 21:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hobby2018

2019/02/11 07:43

簡潔かつ全く無駄のないコードの提示ありがとうございます。
guest

0

銀行では濁点・半濁点を分離しているようです。

【JavaScriptで濁音・半濁音を清音と濁点・半濁点に分解する - Note to Self】
http://sonaiyuutemo.hatenablog.jp/entry/2018/02/20/163809

全銀フォーマットでは濁点・半濁点も1文字とカウントするため分離する必要がある


データ側で「頭文字」という項目を作るとか、そもそも「furigana」が表示対象でないなら濁点・半濁点を取ってしまうとか、提示したもののように対照表を作って処理するとかそのあたりでしょうか。

投稿2019/02/10 16:43

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hobby2018

2019/02/11 07:35

回答ありがとうございます。データ側で対処する発想は私にはなかったです。やはり対象表での処理になりそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問