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;
}
相關文章
相關標籤/搜索