Ruby's Louvre

每天学习一点点算法

导航

javascript String.indexOf实现

群里abcd提出问题,现在有以下三个实现,欢迎大家参与(注意,为了兼容IE6,不能使用str[i],要用str.charAt(i);不能使用slice,replace等原生函数):

GrayZhang的实现


String.prototype.substring = function(start, length) {
    var array = [];
    for (var i = start; i < start + length; i++) {
        array.push(this.charAt(i));
    }
    return array.join();
};
String.prototype.indexOf = function(s) {
    for (var i = 0; i < this.length - s.length; i++) {
        if (this.charAt(i) === s.charAt(0) &&
            this.substring(i, s.length) === s) {
            return i;
        }
    }
    return -1;
};

我的实现:

//by 司徒正美 2011.8.18
String.prototype.indexOf = function(sub){
        var a = sub.charAt(0),an = sub.length,n = this.length;
        if(n == an){
          return this == sub ? 0 : -1
        }
        if(n < an){
          return -1
        }
        loop:
          for(var i=0;i < n;i++){
          if(this.charAt(i) == a){
            for(var j=1;j < an;j++){
              if(this.charAt(j+i) != sub.charAt(j)){
                continue loop
              }
            }
            return i
          }
        }
        return -1;
      }

       var a = "aabbccb";
      console.log(a.indexOf("bbccb"))//2
      console.log("Blue Whale".indexOf("Blue") )   // returns 0
      console.log("Blue Whale".indexOf("Blute"))   // returns -1

posted on 2011-08-19 09:00  司徒正美  阅读(5312)  评论(7编辑  收藏  举报