#最初に
タイトル通り、半角カタカナを全角カタカナへ変換します。
今更な内容ですが自分が採用している書き方を載せます。
どちらかといえば長文の文字列向け?
短い文字列でも遅くなりすぎるという事はないと思います。
#1.String.prototypeを拡張
if(!String.prototype.toZenKata) {
String.prototype.toZenKata = function () {
//muddy
var dm = 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ';
var sm = 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ';
//kiyone
var dk = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'
+'マミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・';
var sk = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・';
var str = this;
for (var i=0,len=dm.length; i<len; i++) {
str = str.split( sm.slice(i*2, i*2+2) ).join( dm.slice(i, i+1) );
}
for (var i=0,len=dk.length; i<len; i++) {
str = str.split( sk.slice(i, i+1) ).join( dk.slice(i, i+1) );
}
return str;
};
}
const text = 'ダヂヅデドダヂヅデドダヂヅデド';
console.log( text.toZenKata() ); //result => ダヂヅデドダヂヅデドダヂヅデド
#2.普通に関数で
//muddy
const D_MUD = 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ';
const S_MUD = 'ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ';
//kiyone
const D_KIY = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホ'
+'マミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・';
const S_KIY = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンァィゥェォッャュョ。、ー「」・';
const toZenKata = str => {
for (let i=0,len=D_MUD.length; i<len; i++) {
str = str.split( S_MUD.slice(i*2, i*2+2) ).join( D_MUD.slice(i, i+1) );
}
for (let i=0,len=D_KIY.length; i<len; i++) {
str = str.split( S_KIY.slice(i, i+1) ).join( D_KIY.slice(i, i+1) );
}
return str;
};
const text = 'ダヂヅデドダヂヅデドダヂヅデド';
console.log( toZenKata( text ) ); //result => ダヂヅデドダヂヅデドダヂヅデド
1と違い一部外に置いたのは、どちらに置くのがベストか私がいまいち理解できてないからです。
#最後に
長い文字列を扱うケースはあまりないかもしれませんね…