indexOf

    Return the first index at which a given element can be found.

    Usage

    var indexOf = require( '@stdlib/utils/index-of' );
    

    indexOf( arr, searchElement[, fromIndex] )

    Returns the first index at which a given element can be found.

    var arr = [ 4, 3, 2, 1 ];
    
    var idx = indexOf( arr, 3 );
    // returns 1
    

    If a searchElement is not present in an input array, the function returns -1.

    var arr = [ 4, 3, 2, 1 ];
    
    var idx = indexOf( arr, 5 );
    // returns -1
    

    By default, the implementation searches an input array starting from the first element. To start searching from a different element, specify a fromIndex.

    var arr = [ 1, 2, 3, 4, 5, 2, 6 ];
    
    var idx = indexOf( arr, 2, 3 );
    // returns 5
    

    If a fromIndex exceeds the input array length, the function returns -1.

    var arr = [ 1, 2, 3, 4, 2, 5 ];
    
    var idx = indexOf( arr, 2, 10 );
    // returns -1
    

    If a fromIndex is less than 0, the starting index is determined relative to the last index (with the last index being equivalent to fromIndex = -1).

    var arr = [ 1, 2, 3, 4, 5, 2, 6, 2 ];
    
    var idx = indexOf( arr, 2, -4 );
    // returns 5
    
    idx = indexOf( arr, 2, -1 );
    // returns 7
    

    If fromIndex is less than 0 and its absolute value exceeds the input array length, the function searches the entire input array.

    var arr = [ 1, 2, 3, 4, 5, 2, 6 ];
    
    var idx = indexOf( arr, 2, -10 );
    // returns 1
    

    The first argument is not limited to arrays, but may be any array-like object.

    var str = 'bebop';
    
    var idx = indexOf( str, 'o' );
    // returns 3
    

    Notes

    • Search is performed using strict equality comparison. Thus,

      var arr = [ 1, [ 1, 2, 3 ], 3 ];
      
      var idx = indexOf( arr, [ 1, 2, 3 ] );
      // returns -1
      
    • This implementation is not ECMAScript Standard compliant. Notably, the standard specifies that an array be searched by calling hasOwnProperty (thus, for most cases, incurring a performance penalty), and the standard does not accommodate a searchElement equal to NaN. In this implementation, the following is possible:

      // Locate the first element which is NaN...
      var arr = [ 1, NaN, 2, NaN ];
      
      var idx = indexOf( arr, NaN );
      // returns 1
      
      // Prototype properties may be searched as well...
      function Obj() {
          this[ 0 ] = 'beep';
          this[ 1 ] = 'boop';
          this[ 2 ] = 'woot';
          this[ 3 ] = 'bap';
          this.length = 4;
          return this;
      }
      Obj.prototype[ 2 ] = 'bop';
      
      var obj = new Obj();
      
      idx = indexOf( obj, 'bop' );
      // returns -1
      
      delete obj[ 2 ];
      
      idx = indexOf( obj, 'bop' );
      // returns 2
      

    Examples

    var indexOf = require( '@stdlib/utils/index-of' );
    
    var arr;
    var obj;
    var str;
    var idx;
    var i;
    
    // Arrays...
    arr = new Array( 10 );
    for ( i = 0; i < arr.length; i++ ) {
        arr[ i ] = i * 10;
    }
    idx = indexOf( arr, 40 );
    
    console.log( idx );
    // => 4
    
    // Array-like objects...
    obj = {
        '0': 'beep',
        '1': 'boop',
        '2': 'bap',
        '3': 'bop',
        'length': 4
    };
    
    idx = indexOf( obj, 'bap' );
    
    console.log( idx );
    // => 2
    
    // Strings...
    str = 'beepboopbop';
    
    idx = indexOf( str, 'o' );
    
    console.log( idx );
    // => 5