1

JSON obj 内の複数の文字列で char のすべての出現を置き換えることになっている JavaScript でコードを書いています。

すべての文字列に特定の文字が含まれているわけではなく、多くの文字列について話している. だから私の質問は次のとおりです:効率について話すとき、置換を行うのが最善ですか、それとも文字の文字列を検索し、見つかった場合にのみ置換を行うのが最善ですか?

言い換えると:

var obj = ["str","str2","tr3","str","tr2","str3","str","s22tr2","str3","st","rtr2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3"];

オプション1:

for(var i=0;i<obj.length;i++){
  if(obj[i].indexOf("s")!=-1){
      document.write(obj[i].replace(/s/gi,"*"));
  }
}​

オプション 2:

for(var i=0;i<obj.length;i++){
    document.write(obj[i].replace(/s/gi,"*"));
}​

考え?

ありがとう。

4

1 に答える 1

0

ほとんどの場合、obj 内の要素の数と各要素のサイズに依存します。あなたが提供したサンプルで最も速いのは、「結合して置き換える」です。この非常に怠惰な例を確認してください。

var obj = ["str","str2","tr3","str","tr2","str3","str","s22tr2","str3","st","rtr2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3","str","str2","str3"];
var b = obj.join(',');
b +=',' + b; //  * 2
b +=',' + b; //  * 4
b +=',' + b; //  * 8
b +=',' + b; //  * 16
b +=',' + b; //  * 32
b +=',' + b; //  * 64
b +=',' + b; //  * 128
obj = b.split(',');
var t1 = new Date().getTime();

for(var i=0;i<obj.length;i++)
    if(obj[i].indexOf("s")!=-1 || obj[i].indexOf("S")!=-1)
        document.write(obj[i].replace(/s/gi,"*"));
    else
        document.write(obj[i]);
document.write('<br>');

var t2 = new Date().getTime();

for(var i=0;i<obj.length;i++)
    document.write(obj[i].replace(/s/gi,"*"));
document.write('<br>');

var t3 = new Date().getTime();

document.write(obj.join('|').replace(/s/gi,"*").split('|').join('')); // see note
document.write('<br>');

var t4 = new Date().getTime();

alert((t2-t1) + ' vs ' + (t3-t2) + ' vs ' + (t4-t3));

注: '|' object 要素に含まれない char (またはタグ) を表し、エラーを回避するのに役立ちます。

選んで決める。

アップデート:

最初のテストで大文字の S を追加しました。

調査する興味深いケース: /s/gi.test と indexOf

于 2012-06-19T18:03:28.963 に答える