怎样用数组模拟字符串的split方法

我在看一道构造函数的题目,该题目是这样子的:

在String()构造器不存在的情况下自定义一个MyString()的构造函数,记住由于String()不存在,因此编写构造器时不能使用String内建的方法与属性,并且要让您所创建的对象通过以下测试:

var s = new Mystring('hello');
……………………
s.split('e');
["h","llo"]

s.split('l');
["he","","o"]

提示说可以用数组模拟字符串实现,题目中的其他方法和属性我已经实现了,唯独split()不知道怎么实现,想在这里问问有什么实现办法,谢谢。

回复
阅读 3.7k
2 个回答

把字符串转换为字符数组,然后找到分割字符的下标index,0-index-1 构成一个字符串,index+1-length-1构成另外一个字符串。

function MyString(str){
    var arr = str.split('');

    arr.toString = function(){
        return arr.join('');
    }

    arr.valueOf = function(){
        return arr.toString();
    }

    arr.charAt = function(index){
        return arr[parseInt(index)];
    }

    arr.concat = function(conStr){
        return str+conStr;
    }

    arr.slice = function(start, end){
        if (end < 0){
            end = arr.length-1;
        }
        var substring = '';
        for(var i=0; i<arr.length; i++){
            if(i>=start && i<end){
                substring += arr[i];
            }
        }
        return substring;
    }

    arr.split = function(splitStr){
        var splitArr = [];

        var i, j,start;
        for(i=0, start=i; i<arr.length; i++){

            for(j=0; j<splitStr.length && (i+j)<arr.length; j++){
                if(arr[i+j] != splitStr[j])
                    break;
            }

            if (j == splitStr.length){
                var substring = arr.slice(start, i);
                splitArr.push(substring);
                start = (i+j);
            }
        }

        if(start < i){
            var substring = arr.slice(start, i);
            splitArr.push(substring);
        }

        return splitArr;
    }

    arr.reverse = function(){
        for(var i=0, j=arr.length-1; i<j; i++,j--){
            var tp = arr[i];
            arr[i] = arr[j];
            arr[j] = tp;
        }
        return arr;
    }

    return arr;
}

var string = new MyString('hello');

console.log(string.length);
console.log(string[0]);

console.log(string.charAt(1));
console.log(string.charAt('2'));
console.log(string.charAt('e'));

var conStr = string.concat(' world');
console.log(conStr);

var sliceStr = string.slice(1, 3);
console.log(sliceStr);
sliceStr = string.slice(0, -1);
console.log(sliceStr);

console.log(string.split('e'));
console.log(string.split('l'));

//string.reverse();
console.log(string.reverse().toString());
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏