`

array之indexOf()

 
阅读更多
     Array没有indexOf方法,这样在一个数组中查找某个元素的索引时比较麻烦,为了调用方便,于是通过prototype原型扩展了Array.prototype.indexOf():
Array.prototype.indexOf = function(item) { 
  for (var i = 0; i < this.length; i++) { 
    if (this[i] == item) 
      return i; 
    } 
    return -1; 
} 

     但是由于Array在javascript1.6版本已经支持Array.indexOf(),所以高级浏览器ff、chrome等认为是自己原生支持的固有的属性。而IE8以下认为indexOf是“用户定义的属性”,这就出现了问题。 所以for in遍历数组元素的时候,要利用到hasOwnProperty.详见:
http://wangjingyi.iteye.com/blog/2038264

     indexOf方法使用全等(===)来判断一个元素是否符合搜索。搜索字符串及数字可能没有问题,但是搜索对象和数组可能会有问题。
// 可以判断两个对象的属性和值是否相等,但是不等判断两个对象是否相等,除非它们指向相同的地址
        var e1 = {
            "name": "wjy",
            "blog": "http://www.wangjingyi.iteye.com"
        },
        e2 = {
            "name": "zyc",
            "blog": "http://www.zhangyaochun.iteye.com"
        },
        arr = [e1, e2],
        index = arr.indexOf(e1);    
        console.log(index);//Outputs: 0


     Array.prototype.indexOf()方法是在ES5规范中添加的,在IE8及以下浏览器不支持,可以使用下面的Polyfill或者一些封装库Underscore or Lo-Dash来兼容:
Array.prototype.indexOf = Array.prototype.indexOf || function (searchElement, fromIndex) {
        if ( this === undefined || this === null ) {
            throw new TypeError( '"this" is null or not defined' );
        }
      
        var length = this.length >>> 0; // Hack to convert object.length to a UInt32
      
        fromIndex = +fromIndex || 0;
      
        if (Math.abs(fromIndex) === Infinity) {
            fromIndex = 0;
        }
      
        if (fromIndex < 0) {
            fromIndex += length;
      
            if (fromIndex < 0) {
              fromIndex = 0;
            }
        }
      
        for (; fromIndex < length; fromIndex++) {
            if (this[fromIndex] === searchElement) {
                return fromIndex;
            }
        }      
        return -1;
    };


参考:http://www.kwstu.com/ArticleView/manong_201411071635191494
http://www.jb51.net/article/35963.htm
分享到:
评论

相关推荐

    Array.prototype.indexOf:符合ES2015规范的“ Array.prototype.indexOf” shimpolyfillreplacement可以向下使用到ES3

    array.prototype.indexof 符合ES2015规范的shim / polyfill / replacement的Array.prototype.indexof ,可工作到ES3。 该软件包实现了接口。 它可以在ES3支持的环境中工作并符合。 因为Array.prototype.indexOf...

    解决遍历时Array.indexOf产生的性能问题

    在讨论如何解决遍历时Array.indexOf产生性能问题之前,先需要了解Array.indexOf方法的工作原理及其在JavaScript中的重要性。Array.indexOf是JavaScript数组对象的一个方法,用于确定某个特定元素在数组中的位置,...

    为JS扩展Array.prototype.indexOf引发的问题探讨及解决

    Array没有indexOf方法,这样在一个数组中查找某个元素的索引时比较麻烦,为了调用方便,于是通过prototype原型扩展了Array.prototype.indexOf(),这样用起来就比较方便了。但是这个自定义的indexOf在对数组进行遍历...

    JavaScript Array对象扩展indexOf()方法

    这段代码首先检查Array.prototype中是否已经存在indexOf()方法,如果不存在(即为undefined),则通过函数赋值的方式向Array.prototype添加一个新的indexOf()方法。这是利用了JavaScript中函数也是对象的特性,以及...

    Array index out of bound exception

    The program next reads in an index k from the user, then calls a method readValue(int [ ] a, int k) that would return the value of a[k]. The main program displays the value a[k]. If the index is out ...

    为JS扩展Array.prototype.indexOf引发的问题及解决办法

    为了解决这个问题,开发者通常会选择扩展Array原型(prototype),添加indexOf方法。Array.prototype是所有数组对象的原型对象,向这个原型对象添加方法,所有数组实例都会继承这个新方法。这样,我们就可以很方便地...

    C# 数组中的 indexOf 方法及使用

    array.indexOf(‘REG') // 0 array.indexOf(‘R') // -1 array.indexOf('2018′) // 1 array.indexOf(2018) // -1 arr.indexOf(‘orange’) 输出 0 因为 ‘orange’ 是数组的第 0 个元素,匹配到并返回下标。 ...

    array-index-of:强大的Array.prototype.indexOf版本

    Array.prototype.indexOf的更强大版本 安装 $ npm install array-index-of 例子 var indexOf = require ( 'array-index-of' ) ; var index = indexOf ( [ 1 , 2 , 3 ] , 2 ) ; // 1 var index2 = indexOf ( [ { a ...

    js_array-method-indexOf

    在JavaScript编程语言中,`Array.prototype.indexOf()`是一个非常重要的数组方法。它用于查找指定元素在数组中的索引,如果找到则返回该元素的索引,否则返回-1。这个方法对于处理数组数据非常实用,尤其是在需要...

    array-indexof-shim:ECMAScript 5 Array.prototype.indexOf 的 Shim

    ECMAScript 5 Array.prototype.indexOf 的 Shim。 基于。 安装 通过: component install gamtiq/array-indexof-shim 用法 var indexOf = require ( "array-indexof-shim" ) ; ... var nIndex1 = someArray . ...

    Flex中Array的IndexOf 的作用示例介绍

    IndexOf是Array类提供的一个方法,它用于查找数组中某个元素的索引位置。其工作原理是从数组的开头向后查找,如果找到了指定的元素,就返回该元素在数组中的位置(即索引),如果没有找到,则返回-1。 IndexOf方法...

    Ext.Array例子

    6. **索引查找**:`indexOf()` 方法查找元素在数组中的索引,`Ext.Array.indexOf(array, item)` 7. **排序**:`sort()` 方法对数组进行排序,可以自定义比较函数,如 `array.sort(function(a, b){ return a - b; })...

    JavaScript从数组的indexOf()深化之Object的Property机制_.docx

    array.indexOf(element[, fromIndex]) ``` - `element`: 需要在数组中查找的元素。 - `fromIndex`: 可选参数,表示搜索的起始位置,默认为0。 **示例**: ```javascript let arr = [1, 2, 3, 4, 5]; console.log...

    js下通过prototype扩展实现indexOf的代码.docx

    `indexOf`是JavaScript内置数组方法之一,用于查找指定元素在数组中的索引,如果找不到则返回-1。 以下是一个简单的`indexOf`实现,它是通过在`Array.prototype`上添加一个新的函数来完成的: ```javascript Array...

    JavaScript 不支持 indexof 该如何解决

    该polyfill通过扩展Array.prototype来添加indexOf方法,这样即使在不支持该方法的浏览器中,也可以调用indexOf()进行元素搜索。 具体的polyfill代码如下: ```javascript if (!Array.prototype.indexOf) { Array....

Global site tag (gtag.js) - Google Analytics