forIn

Invoke a function for each own and inherited enumerable property of an object.

Usage

var forIn = require( '@stdlib/utils/for-in' );

forIn( obj, fcn[, thisArg ] )

Invokes a function for each own and inherited enumerable property of an object.

function log( value, key ) {
    console.log( '%s: %d', key, value );
}

function Foo() {
    this.a = 1;
    this.b = 2;
    return this;
}

Foo.prototype.c = 3;
Foo.prototype.d = 4;

var obj = new Foo();

forIn( obj, log );
/* e.g., =>
    a: 1
    b: 2
    c: 3
    d: 4
*/

The invoked function is provided three arguments:

  • value: object property value
  • key: object property
  • obj: the input object

To terminate iteration before visiting all properties, the provided function must explicitly return false.

function log( value, key ) {
    console.log( '%s: %d', key, value );
    return false;
}

var obj = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4
};

forIn( obj, log );
// e.g., => a: 1

To set the function execution context, provide a thisArg.

function sum( value ) {
    this.sum += value;
    this.count += 1;
}

var obj = {
    'a': 1,
    'b': 2,
    'c': 3,
    'd': 4
};

var context = {
    'sum': 0,
    'count': 0
};

forIn( obj, sum, context );

var mean = context.sum / context.count;
// returns 2.5

Notes

  • The function returns the input object.
  • Property iteration order is not guaranteed.

Examples

var fromCodePoint = require( '@stdlib/string/from-code-point' );
var forIn = require( '@stdlib/utils/for-in' );

function update( value, key, obj ) {
    console.log( '%s: %d', key, value );
    obj[ key ] *= value;
}

function Foo() {
    return this;
}

Foo.prototype.beep = 3.14;

var obj;
var key;
var i;

obj = new Foo();
for ( i = 0; i < 26; i++ ) {
    key = fromCodePoint( 97 + i );
    obj[ key ] = i;
}

forIn( obj, update );
console.log( obj );