split用循环实现它的功能(非直接使用split)

split用循环实现它的功能(非直接使用split)

解析:
split的作用就是把字符串通过指定的字符分割开来,然后组成数组
官方点的说法:split() 方法用于把一个字符串分割成字符串数组。
我们这里用循环实现split的功能,但是不涉及可选参数那一条,即:指定返回的数组的最大长度。
思路分析:
由split的方法我们可以知道,我们应该把一个字符串分割以后存储在数组里面,在这里我们的理想状态是一个分隔符。但是实际情况我们需要考虑多个分隔符。
我把单个分隔符和多个分隔符的代码都贴上去,我相信大家就都明白了。

单个分隔符

        var str = '香蕉,苹果,梨子,枇杷';
        String.prototype.split = function (sep) {
            var arr = [];
            var temp = '';
            for(var i = 0 ; i<this.length;i++){
                if (this[i]==sep) {
                    arr[arr.length]=temp;
                    temp='';
                    continue;
                }
               temp+= this[i];
            }
            arr[arr.length] =temp; 
            return arr;
        }
        console.log(str.split(','));

在这里简单的说一下单个字符分割的流程,在String的原型中插入一个方法,传入的实参是分割的符号,先循环出每个字符,然后判断循环出来的字符是否是分隔符,如果是,就把后面累加的字符存储到数组里面,然后置空。(如果不置空,就会一直累加下去,就不是我们想要的结果)。最后是continue(结束本次的语句,如果不结束就会执行下面的累加操作,就会导致分隔符放到数组里面去)。最后注意一点:arr[arr.length] =temp;必须要添加这一条语句,因为如果不添加最后一个字符,例子中的枇杷就不会显示出来。(因为在执行完成最后一次for循环以后就没有再执行if里面的判断了,temp里面的字符也不会放到数组里面)。
多个分隔符
多个分隔符有一点复杂,我还是先上代码把。(说明一点,代码只考虑了多个分隔符的情况,里面缺少了如果实参传入没有字符串的判断等语句,请无视)

         var str = '香蕉,,苹果,,梨子,,枇杷';
        String.prototype.split = function (separator) {
            var arr = [];
            var temp = '';
            var sep = '';
            for(var i=0; i < this.length;){
                // 如果是分隔符就把temp放到数组里面
                // 考虑分隔符是多个字符的情况
                sep = this[i];//初始化
                for(var j=1; j < separator.length; j++){//本来就+1所以j是1
                    sep += this[i+j];
                }//出来地sep就是两个分隔符;
                // 找到了分隔符要做的事情
                if(sep == separator){
                    // console.log(arr.length);
                    arr[arr.length] = temp;
                    temp = '';
                    i += separator.length;//因为分隔符是两个所以是+2【之所以用length是因为要考虑多个地情况】
                    continue;
                }
                // 修改循环的判断条件
                temp += this[i++];//是正常情况下地时候就是+1  【非多个分隔符的时候】
                // i++;
            }
            // 最后这个temp也要放到数组里面
            arr[arr.length] = temp;
            return arr;
        }

        console.log(str.split(',,'));//[]

多个字符的情况下,大体和单个字符差不多,但是需要注意的一点是,我们应该如何判断分割符的个数,在这里我们用一个嵌套在外循环里面的内循环for循环来判断分隔符的个数,在这里的j=1,举个例子,【香蕉,,】下标分别为0123,这里假如是2号位置的分隔符,进入循环就是this[2+1]=this[3],三号位还是分隔符,然后sep就是两个分隔符,随即跳出循环。如果这里j=0;就会多循环一次到达苹这个字上面,就出错了。sep = this[i];这里是初始化this[i]如果不初始化就会和之前的累加。所以让j=0然后注释掉这段代码是行不通的。
多个字符的时候还有一点必须说明的是,第一个for循环里面的i++被替换到了下面,第一个是在if判断语句里面,在里面因为分隔符是两个,当遇到两个分隔符的时候判断条件应该是跳过这两个分隔符,所以是加上分隔符的长度。
第二个在temp += this[i++];里面这里是没有遇到分割符的时候每个字符都会遍历所以是加1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值