簡體   English   中英

搜索與搜索和替換

[英]Search vs Search & replace

我正在用JavaScript寫一段代碼,該代碼應該替換JSON obj中多個字符串中所有出現的char。

並非所有字符串都包含特定的char,並且我們正在談論很多字符串 所以我的問題是:在談論效率時,最好是進行替換或在字符串中搜索char,並且僅當找到make replace時才是?

換一種說法:

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,"*"));
}​

有什么想法嗎?

謝謝。

在大多數情況下,它取決於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));

注意:“ |” 表示不包含在對象元素中的字符(甚至是標簽),有助於避免錯誤。

挑選。

更新:

在第一次測試中增加了大寫字母S

有趣的案例:/s/gi.test與indexOf

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM