function forEach(obj, fn) {
        // Don't bother if no value provided
        if (obj === null || typeof obj === "undefined") {
          return;
        }

        // Force an array if not already something iterable
        if (typeof obj !== "object") {
          /*eslint no-param-reassign:0*/
          obj = [obj];
        }

        if (isArray(obj)) {
          // Iterate over array values
          for (var i = 0, l = obj.length; i < l; i++) {
            fn.call(null, obj[i], i, obj);
          }
        } else {
          // Iterate over object keys
          for (var key in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, key)) {
              fn.call(null, obj[key], key, obj);
            }
          }
        }
      }
/**
       * Iterate over an Array or an Object invoking a function for each item.
       *
       * If `obj` is an Array callback will be called passing
       * the value, index, and complete array for each item.
       *
       * If 'obj' is an Object callback will be called passing
       * the value, key, and complete object for each property.
       *
       * @param {Object|Array} obj The object to iterate
       * @param {Function} fn The callback to invoke for each item
       */
Iterate over an Array or an Object invoking a function for each item.
If `obj` is an Array callback will be called passing
the value, index, and complete array for each item.

If 'obj' is an Object callback will be called passing
the value, key, and complete object for each property.

@param {Object|Array} obj The object to iterate
@param {Function} fn The callback to invoke for each item
Iterate over an Array or an Object invoking a function for each item . If ` obj ` is an Array callback will be called passing the value index and complete array for each item . If ' obj ' is an Object callback will be called passing the value key and complete object for each property . @param { Object|Array } obj The object to iterate @param { Function } fn The callback to invoke for each item
function forEach(obj, fn) {
        if (obj === null || typeof obj === "undefined") {
          return;
        }
        if (typeof obj !== "object") {
          obj = [obj];
        }
        if (isArray(obj)) {
          for (var i = 0, l = obj.length; i < l; i++) {
            fn.call(null, obj[i], i, obj);
          }
        } else {
          for (var key in obj) {
            if (Object.prototype.hasOwnProperty.call(obj, key)) {
              fn.call(null, obj[key], key, obj);
            }
          }
        }
      }
function forEach ( obj , fn ) { if ( obj === null || typeof obj === "undefined" ) { return ; } if ( typeof obj !== "object" ) { obj = [ obj ] ; } if ( isArray ( obj ) ) { for ( var i = 0 , l = obj . length ; i < l ; i ++ ) { fn . call ( null , obj [ i ] , i , obj ) ; } } else { for ( var key in obj ) { if ( Object . prototype . hasOwnProperty . call ( obj , key ) ) { fn . call ( null , obj [ key ] , key , obj ) ; } } } }
Iterate over an Array or an Object invoking a function for each item.
Iterate over an Array or an Object invoking a function for each item .
// Don't bother if no value provided // Force an array if not already something iterable /*eslint no-param-reassign:0*/ // Iterate over array values // Iterate over object keys