String.prototype.indexOf()和String.prototype.lastIndexOf()

String.prototype.indexOf()
indexOf() 方法返回调用 String 对象中第一次出现的指定值的索引,从fromIndex的位置开始查找。
searchValue
一个字符串表示被查找的值。
fromIndex 可选
表示调用该方法的字符串中开始查找的位置。能够是任意整数。默认值为 0。若是 fromIndex < 0 则查找整个字符串(如同传进了 0)。若是 fromIndex >= str.length,则该方法返回 -1,除非被查找的字符串是一个空字符串,此时返回 str.length。
 
指定值的第一次出现的索引; 若是没有找到 -1。
 
"Blue Whale".indexOf("Blue");     // returns  0
"Blue Whale".indexOf("Blute");    // returns -1
"Blue Whale".indexOf("Whale", 0); // returns  5
"Blue Whale".indexOf("Whale", 5); // returns  5
"Blue Whale".indexOf("", 9);      // returns  9
"Blue Whale".indexOf("", 10);     // returns 10
"Blue Whale".indexOf("", 11);     // returns 10
"Blue Whale".indexOf("", 11);     // returns 10
区分大小写
"Blue Whale".indexOf("blue") // returns -1
使用 indexOf 统计一个字符串中某个字母出现的次数
var str = 'To be, or not to be, that is the question.';
var count = 0;
var pos = str.indexOf('e');

while (pos !== -1) {
  count++;
  pos = str.indexOf('e', pos + 1);
}

console.log(count); // displays 4

本身实现简单的indexOf():this

String.prototype.indexOf = function (searchElement) {
    var target = String(searchElement);
    var start = arguments.length > 1 ? Number(arguments[1]) : 0;
    
    start = start >>> 0;

    if (start < 0) {
        start = 0;
    }

    if (target == '') {
        return start >= this.length ? this.length : start;
    }

    if (start >= this.length) {
        return -1;
    }
    
    var s = start;
    var l = 0;
    while (s < this.length) {
        if (this.charAt(s) == target.charAt(l)) {
            var i = l++;
            var j = s++;
            while (i < target.length) {
                if (this.charAt(j) != target.charAt(i)) {
                    l = 0;
                    break;
                }
                i++;
                j++;
            }
            if (i == target.length) {
                return s-1;
            }
        }
        s++;
    }
    return -1;
}

String.prototype.lastIndexOf()spa

lastIndexOf()方法返回指定值在调用该方法的字符串中最后出现的位置,若是没找到则返回 -1。从该字符串的后面向前查找,从 fromIndex 处开始。prototype

searchValue
一个字符串,表示被查找的值。
fromIndex
从调用该方法字符串的此位置处开始查找。能够是任意整数。默认值为 str.length。若是为负值,则被看做 0。若是 fromIndex > str.length,则 fromIndex 被看做 str.length。
 
字符串中的字符被从左向右索引。首字符的索引(index)是 0,最后一个字符的索引是 stringName.length - 1。
"canal".lastIndexOf("a")   // returns 3
"canal".lastIndexOf("a",2) // returns 1
"canal".lastIndexOf("a",0) // returns -1
"canal".lastIndexOf("x")   // returns -1

本身实现简单的lastIndexOf():code

String.prototype.lastIndexOf = function (searchElement) {
    var target = String(searchElement);

    var start = arguments.length > 1 ? Number(arguments[1]) : this.length;

    start = start >>> 0;

    if (start < 0) {
        start = 0;
    }
    if (start > this.length) {
        start = this.length;
    }

    if (target == '') {
        return start >= this.length ? this.length : start;
    }

    var s = start;
    var l = target.length - 1;
    if (s == this.length) {
        s--;
    }
    
    while (s > -1) {
        if (this.charAt(s) == target.charAt(l)) {
            var i = l--;
            var j = s--;
            while (i > -1) {
                if (this.charAt(j) != target.charAt(i)) {
                    i = target.length - 1;
                    break;
                }
                i--;
                j--;
            }
            if (i == -1) {
                return s+1;
            }
        }
        s--;
    }
    return -1;
}
相关文章
相关标签/搜索