首页 新闻 会员 周边 捐助

自己用JavaScript实现string的substring方法

0
悬赏园豆:20 [已关闭问题] 关闭于 2012-09-17 13:33

碰到一个题目,要求如题,我目前想到的方案有以下三种:

方法一:用charAt取出截取部分:

String.prototype.mysubstring=function(beginIndex,endIndex){
    var str=this,
        newArr=[];
    if(!endIndex){
        endIndex=str.length;
    }
    for(var i=beginIndex;i<endIndex;i++){
        newArr.push(str.charAt(i));
    }
    return newArr.join("");
}

//test
"Hello world!".mysubstring(3);//"lo world!"
"Hello world!".mysubstring(3,7);//"lo w"

 

方法二:把字符串转换成数组然后取出需要部分:

String.prototype.mysubstring=function(beginIndex,endIndex){
    var str=this,
        strArr=str.split("");
    if(!endIndex){
        endIndex=str.length;
    }
    return strArr.slice(beginIndex,endIndex).join("");
}

//test
console.log("Hello world!".mysubstring(3));//"lo world!"
console.log("Hello world!".mysubstring(3,7));//"lo w"

 

方法三:取出头尾部分,然后用replace去掉多余部分,适用于beginIndex较小,字符串长度-endIndex较小的情况:

String.prototype.mysubstring=function(beginIndex,endIndex){
    var str=this,
        beginArr=[],
        endArr=[];
    if(!endIndex){
        endIndex=str.length;
    }
    for(var i=0;i<beginIndex;i++){
        beginArr.push(str.charAt(i));
    }
    for(var i=endIndex;i<str.length;i++){
        endArr.push(str.charAt(i));
    }
    return str.replace(beginArr.join(""),"").replace(endArr.join(""),"");
}

//test
console.log("Hello world!".mysubstring(3));//"lo world!"
console.log("Hello world!".mysubstring(3,7));//"lo w"

 

向大家请教是否有更高效的方案,或我的代码是否有改进的地方,谢谢!

草根程序猿的主页 草根程序猿 | 初学一级 | 园豆:129
提问于:2012-08-31 11:23
< >
分享
所有回答(2)
0

第二种比较好吧

gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-31 11:34
0

var s = "abcdefg";
    s.slice(0,4)    // Returns "abcd"
    s.slice(2,4)    // Returns "cd"
    s.slice(4)      // Returns "efg"
    s.slice(3,-1)   // Returns "def"
    s.slice(3,-2)   // Returns "de"
    s.slice(-3,-1)  // Should return "ef"; returns "abcdef" in IE 4

jason2013 | 园豆:1998 (小虾三级) | 2012-08-31 11:36

楼主要自己实现slice 的功能

支持(0) 反对(0) gunsmoke | 园豆:3592 (老鸟四级) | 2012-08-31 11:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册