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 );