読者です 読者をやめる 読者になる 読者になる

文字列を1つ1つの文字の配列にする

'foo'を['f','o','o']にする際に以下のコードがどちらが早いか試行したのでメモ。T01は正規表現を使って分割して配列にした。T02はcharAtで一つ一つ取り出して配列にした。

実験コード

function T01(s){
    return s.split(/(.|\r?\n){0}/);
};
function T02(s)
{
    var i, f, a = Array(s.length-1);
    for(i=0,f=s.length-1;i<=f;i++) a[i] = s.charAt(i);
    return a.join('');
};
function T03(s){
    return s.split('');
};
// A-Zまでの文字列(26×50=1300)
bigChar = new Array(51).join('ABCDEFGHIJKLMNOPQRSTUVWXYZ');

// 検証用(50回ループ)
s = new Date();
for(i=0;i<=50;i++)
{
    // ここで処理
};
e = new Date();

結果

IEだと正規表現がはやくなるようにチューニングされているんですかね。マシンのせいかなFirefoxだとデータのばらつきが多い気が…(気のせいにしておこう。)

IE6
試行1 試行2 試行3 試行4 試行5 試行6 試行7 試行8 試行9 試行10 平均
T01 290 300 290 290 290 290 290 300 301 291 293.2(σ 5.10)
T02 951 932 951 942 951 971 971 941 972 972 955.4(σ 15.02)
T03 210 181 200 201 190 201 201 210 200 200 199.4(σ 8.57)
Firefox
試行1 試行2 試行3 試行4 試行5 試行6 試行7 試行8 試行9 試行10 平均
T01 781 1191 1071 1132 1172 1162 1131 1102 1002 1152 1089.6(σ 121.6)
T02 561 601 591 610 621 621 641 651 661 691 624.9(σ 37.5)
T03 130 190 210 130 161 150 160 160 160 161 161.2(σ 24.2)

追記

str.split("")だとどうでしょうかというコメントがあったので試しました(T3です)。str.split("")でも1文字ずつ分割できるんですね(無知でした><)