indexOf
Returns the first index at which a given element can be found.
Installation
$ npm install utils-indexof
Usage
var indexOf = ;
indexOf( arr, searchElement[, fromIndex] )
Returns the first index at which a given element can be found.
var arr = 4 3 2 1 ;var idx = ;// returns 1
If a searchElement
is not present in an input array
, the function
returns -1
.
var arr = 4 3 2 1 ;var idx = ;// returns -1
By default, the implementation searches an input array
beginning 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 = ;// returns 5
If a fromIndex
exceeds the input array
length, the function
returns -1
.
var arr = 1 2 3 4 2 5 ;var idx = ;// 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 = ;// returns 5idx = ;// 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 = ;// returns 1
The first argument is not limited to arrays
, but may be any array-like object
.
var str = 'bebop';var idx = ;// returns 3
Notes
-
Search is performed using strict equality comparison. Thus,
var arr = 1 123 3 ;var idx = ;// returns -1 -
This implementation is not ECMAScript Standard compliant. Notably, the standard specifies that an
array
be searched by callinghasOwnProperty
(thus, for most cases, incurring a performance penalty), and the standard does not accommodate asearchElement
equal toNaN
. In this implementation, the following is possible:// Locate the first element which is NaN...var arr = 1 NaN 2 NaN ;var idx = ;// returns 1// Prototype properties may be searched as well...{this 0 = 'beep';this 1 = 'boop';this 2 = 'woot';this 3 = 'bap';thislength = 4;return this;}Objprototype 2 = 'bop';var obj = ;idx = ;// returns -1delete obj 2 ;idx = ;// returns 2
Examples
var indexOf = ;var arr;var obj;var str;var idx;var i;// Arrays...arr = 10 ;for i = 0; i < arrlength; i++arr i = i * 10;idx = ;console;// returns 4// Array-like objects...obj ='0': 'beep''1': 'boop''2': 'bap''3': 'bop''length': 4;idx = ;console;// returns 2// Strings...str = 'beepboopbop';idx = ;console;// returns 5
To run the example code from the top-level application directory,
$ node ./examples/index.js
Tests
Unit
This repository uses tape for unit tests. To run the tests, execute the following command in the top-level application directory:
$ make test
All new feature development should have corresponding unit tests to validate correct functionality.
Test Coverage
This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:
$ make test-cov
Istanbul creates a ./reports/coverage
directory. To access an HTML version of the report,
$ make view-cov
Browser Support
This repository uses Testling for browser testing. To run the tests in a (headless) local web browser, execute the following command in the top-level application directory:
$ make test-browsers
To view the tests in a local web browser,
$ make view-browser-tests
License
Copyright
Copyright © 2016. Athan Reines.