文字列を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文字ずつ分割できるんですね(無知でした><)