我正在用JavaScript编写一段代码,该代码应该替换JSON obj中多个字符串中所有出现的char。
并非所有字符串都包含特定字符,我们正在讨论很多字符串。所以我的问题是:在讨论效率时,是否最好进行替换或搜索字符串中的char,并且只有在找到make替换时?
换句话说:
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,"*"));
}
思想?
感谢。
答案 0 :(得分: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));
注意:'|'表示未包含在对象元素中的char(或甚至是标记),有助于避免错误。
选择并选择。
更新:
在第一次测试中添加了资本S.
有趣的案例:/s/gi.test vs indexOf