<script>
var str="2$5,6$8,3$9";
str = str.replace(/$/g,",");
var a = str.split(",");
document.write(a);
document.write("<br />");
function replace01(arr)
{
for(var i = 0;i<arr.length;i++)
{
if(a[i] = 2)
{
a[i+1]=1;
};
};
}
replace01(a);
</script>想把2$5换成2$1,不过脚本在浏览器中运行速度过慢,无法修改,求解

解决方案 »

  1.   


    var str="2$5,6$8,3$9";
    str = str.replace(/\$/g,",");
    var a = str.split(",");
    //上两句可以由 var a = str.split(/\$|,/);代替
    document.write(a);
    document.write("<br />");
    function replace01(arr)
    {
        for(var i = 0;i<arr.length;i++)
        {
            if(a[i] = 2)
            {
                a[i+1]=1;
            };
        };
    }
    replace01(a);
      

  2.   


    var str="2$5,6$8,3$9";
    str = str.replace(/2\$5/, '2$1');
    alert(str)
      

  3.   


    var str="2$5,6$8,3$9";
    str = str.replace(/\$/g,",");
    var a = str.split(",");
    //上两句可以由 var a = str.split(/\$|,/);代替
    document.write(a);
    document.write("<br />");
    function replace01(arr)
    {
        for(var i = 0, il = arr.length;i<il;i++)
        {
            if(a[i] = 2)
            {
                a[i+1]=1;
            };
        };
    }
    replace01(a);
      

  4.   

    为什么加了这个il = arr.length速度就快了?我想把2,5,6,8,3,9换成2,1,6,8,3,9不过结果是2,2,2,2,2,2,1求大神再帮我改改,谢谢
      

  5.   

    本帖最后由 showbo 于 2013-07-10 18:04:21 编辑
      

  6.   

    先恭喜showbo接任版主,辛苦了再来谈谈LZ的问题吧
    除去上面朋友说的几个问题,LZ最大的问题是思路,而且也不严谨
    如果按你的思路
    2$5,6$8,3$9
    12$5,6$8,3$9
    2$5,6$8,3$9,2$51
    以上三组字符串,将会得到什么结果呢?是你想要的吗?所以,如果你仅仅是需要将2$5转换成2$1,按你代码的思路
    第一种方法:$号不需要替换,直接以,号做分隔取得数组判断替换即可
    var str="12$5,6$8,2$5,3$9,2$51";
    var arr=str.split(',');
    for(var i=0;i<arr.length;i++){
        if(arr[i]=='2$5'){
            arr[i]='2$1';
        }
    }
    str=arr.toString();
    alert(str)
    第二种:正则替换
    var str="2$5,12$5,6$8,2$5,2$51";
    str =','+str+','//为了防止出现类似于:12$5,2$51 被错误替换,首尾各加一个,号;这样 [,2$5,]将会是唯一正确匹配的项
    str = str.replace(/,2\$5,/g, ',2$1,'); 
    str=str.substring(1,str.length-1);//去除之前首尾增加的,号
    alert(str)造成死循环的问题出在判断语句上。if(a[i]=2)这个条件将永远成立,因此将永无休止的执行下去,就会出现像楼上版主说的一样,总在最后额外增加一项,然后循环往复
      

  7.   


    应该i=5(最后一项),动态增加一项后arr.length变为7,执行for的i++后i为6,小于7,如此死循环。。arr.length搞错了