搜索与搜索&更换

时间:2012-06-19 16:28:13

标签: javascript

我正在用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,"*"));
}​

思想?

感谢。

1 个答案:

答案 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