[英]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.