JavaScript 查找字符串方法讲解(手写)

String.prototype.indexOf(searchString, fromIndex)

indexOf 方法返回调用它的第一次出现的指定值的索引,从 fromIndex 处进行搜索。如果未找到该值,则返回 -1。

indexOf(searchString, fromIndex)
searchString是传入String上下文,转为一个字符串。如果省略第一个参数,会默认 searchString 是 "undefined"。

fromIndex 是传入 Number 上下文,转为一个数值,转的不是整数,那么就会是默认值 0。如果省略第一个参数默认值为 0。

'hello world'.indexOf('h');  // 0
'hello world'.indexOf('ll');  // 2

Polyfill:

if (!String.prototype.indexOf) {
String.prototype.indexOf = function(searchString, fromIndex) {
    let i;
    if (typeof searchString == 'undefined') {
        searchString = 'undefined';
    }
    searchString = '' + searchString;
    let flen = this.length;
    let zlen = searchString.length;
    fromIndex = +fromIndex;
    if (isNaN(fromIndex) || fromIndex < 0) {
        i = 0;
    } else if( fromIndex >= flen) {
        return -1;
    } else {
        i = fromIndex;
    }
    if (zlen > flen) {
        return -1;
    } else if (zlen == flen) {
        if (this == searchString) {
            return 0;
        } else {
            return -1;
        }
    } else {
        let str = '';
        while(i < flen) {
            str = this.substr(i, zlen);
            if (str == searchString) {
                return i;
            }
            i++;
        }
        if (i == flen) {
            return -1;
        }
    }
}
}

String.prototype.includes(searchString, position)

includes 方法用于判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false。

includes(searchString, fromIndex)
searchString是传入String上下文,转为一个字符串。如果省略第一个参数,会默认 searchString 是 "undefined"。

fromIndex 是传入 Number 上下文,转为一个数值,转的不是整数,那么就会是默认值 0。如果省略第一个参数默认值为 0。

var str = 'To be, or not to be, that is the question.';

console.log(str.includes('To be'));       // true
console.log(str.includes('question'));    // true
console.log(str.includes('nonexistent')); // false
console.log(str.includes('To be', 1));    // false
console.log(str.includes('TO BE'));       // false

 Polyfill:

if (!String.prototype.includes) {
    String.prototype.includes = function(searchString, fromIndex) {
        'use strict';
        if (typeof fromIndex !== 'number') {
          fromIndex = 0;
        }
        
        if (fromIndex + search.length > this.length) {
            return false;
        } else {
            return this.indexOf(searchString, fromIndex) !== -1;
        }
    }
}

String.prototype.lastIndexOf(searchString, fromIndex)

lastIndexOf 方法返回调用它的最后一次出现的指定值的索引,从 fromIndex 处从后向前进行搜索。如果未找到该值,则返回 -1。

lastIndexOf(searchString, fromIndex)
searchString是传入String上下文,转为一个字符串。如果省略第一个参数,会默认 searchString 是 "undefined"。如果传入的是一个空字符串,就返回fromIndex的值,如果fromIndex大于 string.length,就返回string.length。

fromIndex 是传入 Number 上下文,转为一个数值,转的不是整数,那么就会是默认值 0。如果省略第一个参数默认值为 0。

String.prototype.lastIndexOf = String.prototype.lastIndexOf || function(searchValue, fromIndex) {
    let n = 0;
    if (typeof searchValue == 'undefined') {
        searchValue = 'undefined';
    }
    let flen = this.length;
    let zlen = searchValue.length;
    if (typeof fromIndex !== 'number') {
        fromIndex = flen - 1;
    }
    n = fromIndex;
    if (zlen > flen) {
        return -1;
    } else if (zlen == flen) {
        if (this == searchValue) {
            return 0;
        } else {
            return -1;
        }
    } else {
        var str = '';
        while(n >= 0) {
            str = this.substr(n, zlen)
            if (str == searchValue) {
                return n;
            }
            n--;
        }
        if (n <= 0) {
            return -1;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值