大话前端让前端飞Web前端之路

自定义indexOf()方法

2018-05-06  本文已影响10人  fenerchen

JS中的indexOf()

indexOf(searchElement,fromIndex)。接受两个参数,第一个是要查询的项,第二个表示查找起点的索引。如找到,则返回找到的第一个位置,否则返回-1。当fromIndex小于0或者无值,则从0开始查找,若fromIndex>arr.length-1,则返回-1

var numbers = [1,2,3,4,5,4,3,2,1,4];
alert(numbers.indexOf(4)); //3
alert(numbers.indexOf(4,4)); //5
alert(numbers.indexOf(4,9)); //9
alert(numbers.indexOf(4,10)); //-1
alert(numbers.indexOf(4,-10)); //3

一个有意思的事儿

var person = { name: "Nicholas" };
var people = [{ name: "Nicholas" }];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0

alert(people[0]==(person)); //false
alert(morePeople[0]==person); //true
alert(morePeople[0]==people[0]); //false

原因:person和people[0]不是同一个对象,而morePeople[0]和person是同一个对象,所以才有了上述代码的结果。

自定义具有相同功能的indexof

Array.prototype.indexof=function(searchElement,fromIndex){
    var len=this.length;
    //检测有效性
    if(len<=0) reutrn -1;

    //判断fromIndex,来决定下一步处理
    if(typeof fromIndex=='undefined'){fromIndex=0;console.log(fromIndex)}
    if(typeof fromIndex=='number'){
        fromIndex=fromIndex>=0?fromIndex:0;
    }else{
        return 'err';
    }

    //遍历寻找
    for(let i=fromIndex;i<len;i++){
        if(this[i]===searchElement)return i;//返回找到的第一个索引
    }
    return -1;
}

注意:不建议些项目用Array.prototype更改原始对象,更改了会破坏原始环境,引起不必要的bug

下面内容和标题无关:字符串中没有splice()方法的原因:splice()可以更改母体,而字符串不可更改,所有不能用。使用Array.prototype.splice.call(string)也没用,但是Array.prototype.slice.call(string)可以,因为slice不改变母体。

上一篇下一篇

猜你喜欢

热点阅读