# iterMap > Create an [iterator][mdn-iterator-protocol] which invokes a unary function accepting a single numeric argument for each iterated value.
## Usage ```javascript var iterMap = require( '@stdlib/math/iter/tools/map' ); ``` #### iterMap( iterator, fcn\[, options] ) Returns an [iterator][mdn-iterator-protocol] which invokes a unary `function` accepting a single numeric argument for each iterated value. ```javascript var array2iterator = require( '@stdlib/array/to-iterator' ); var sin = require( '@stdlib/math/base/special/sin' ); var it = iterMap( array2iterator( [ 1, 2, 3, 4 ] ), sin ); // returns var r = it.next().value; // returns r = it.next().value; // returns r = it.next().value; // returns // ... ``` The returned [iterator][mdn-iterator-protocol] protocol-compliant object has the following properties: - **next**: function which returns an [iterator][mdn-iterator-protocol] protocol-compliant object containing the next iterated value (if one exists) assigned to a `value` property and a `done` property having a `boolean` value indicating whether the iterator is finished. - **return**: function which closes an [iterator][mdn-iterator-protocol] and returns a single (optional) argument in an [iterator][mdn-iterator-protocol] protocol-compliant object. The invoked `function` is provided one argument: - `value`: iterated value ```javascript var array2iterator = require( '@stdlib/array/to-iterator' ); function fcn( v ) { return v + 10; } var it = iterMap( array2iterator( [ 1, 2, 3, 4 ] ), fcn ); // returns var r = it.next().value; // returns 11 r = it.next().value; // returns 12 r = it.next().value; // returns 13 // ... ``` The function supports the following `options`: - **invalid**: return value when an input [iterator][mdn-iterator-protocol] yields a non-numeric value. Default: `NaN`. By default, the function returns an [iterator][mdn-iterator-protocol] which returns `NaN` when an input [iterator][mdn-iterator-protocol] yields a non-numeric value. To specify a different return value, set the `invalid` option. ```javascript var array2iterator = require( '@stdlib/array/to-iterator' ); var sin = require( '@stdlib/math/base/special/sin' ); var opts = { 'invalid': null }; var it = iterMap( array2iterator( [ '1', '2', '3' ] ), sin, opts ); // returns var v = it.next().value; // returns null v = it.next().value; // returns null // ... ```
## Notes - If an environment supports `Symbol.iterator` **and** a provided [iterator][mdn-iterator-protocol] is iterable, the returned [iterator][mdn-iterator-protocol] is iterable.
## Examples ```javascript var randu = require( '@stdlib/random/iter/randu' ); var sin = require( '@stdlib/math/base/special/sin' ); var iterMap = require( '@stdlib/math/iter/tools/map' ); // Create a seeded iterator for generating pseudorandom numbers: var rand = randu({ 'seed': 1234, 'iter': 10 }); // Create an iterator which consumes the pseudorandom number iterator: var it = iterMap( rand, sin ); // Perform manual iteration... var r; while ( true ) { r = it.next(); if ( r.done ) { break; } console.log( r.value ); } ```