foop
Version:
interfaces that describe their intentions.
53 lines (48 loc) • 4.27 kB
JavaScript
/* eslint no-unused-expressions: "OFF" */
/* eslint guard-for-in: "OFF" */
var toObj = require('../../cast/toObj')
var hasOwnProperty = require('../../util/hasOwnProperty')
/**
* Iterates over own enumerable string keyed properties of an object and
* invokes `iteratee` for each property. The iteratee is invoked with three
* arguments: (value, key, object). Iteratee functions may exit iteration
* early by explicitly returning `false`.
*
* @since 5.0.0-beta.6
* @memberOf loop
*
* @param {Object} object The object to iterate over.
* @param {Function} iteratee The function invoked per iteration.
* @return {Object} object passed in originally
*
* @fork 0.3.0
* @category Object
*
* @NOTE for array, object, and string, iterates over property/index/key
* @TODO !!! did not return object, consistently the others do, why?
*
* @see forEach, forEachRight, forIn, forInRight, forOwnRight
* {@link https://github.com/lodash/lodash/blob/master/forOwn.js lodash-forown}
* @see {@link lodash-forown}
*
* @example
*
* function Foo() {
* this.a = 1
* this.b = 2
* }
*
* Foo.prototype.c = 3
*
* forOwn(new Foo, (value, key) => console.log(key))
* //=> Logs 'a' then 'b' (iteration order is not guaranteed).
*
*/
function forOwn(object, iteratee) {
var obj = toObj(object)
for (var key in obj)
{ hasOwnProperty(obj, key) && iteratee(obj[key], key, obj) }
return obj
}
module.exports = forOwn
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yT3duLmpzIiwic291cmNlcyI6WyJmb3JPd24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJPRkZcIiAqL1xuLyogZXNsaW50IGd1YXJkLWZvci1pbjogXCJPRkZcIiAqL1xuY29uc3QgdG9PYmogPSByZXF1aXJlKCcuLi8uLi9jYXN0L3RvT2JqJylcbmNvbnN0IGhhc093blByb3BlcnR5ID0gcmVxdWlyZSgnLi4vLi4vdXRpbC9oYXNPd25Qcm9wZXJ0eScpXG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydGllcyBvZiBhbiBvYmplY3QgYW5kXG4gKiBpbnZva2VzIGBpdGVyYXRlZWAgZm9yIGVhY2ggcHJvcGVydHkuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBrZXksIG9iamVjdCkuIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb25cbiAqIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXG4gKlxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICogQG1lbWJlck9mIGxvb3BcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHBhc3NlZCBpbiBvcmlnaW5hbGx5XG4gKlxuICogQGZvcmsgMC4zLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqXG4gKiBATk9URSBmb3IgYXJyYXksIG9iamVjdCwgYW5kIHN0cmluZywgaXRlcmF0ZXMgb3ZlciBwcm9wZXJ0eS9pbmRleC9rZXlcbiAqIEBUT0RPICEhISBkaWQgbm90IHJldHVybiBvYmplY3QsIGNvbnNpc3RlbnRseSB0aGUgb3RoZXJzIGRvLCB3aHk/XG4gKlxuICogQHNlZSBmb3JFYWNoLCBmb3JFYWNoUmlnaHQsIGZvckluLCBmb3JJblJpZ2h0LCBmb3JPd25SaWdodFxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL2Zvck93bi5qcyBsb2Rhc2gtZm9yb3dufVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWZvcm93bn1cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICBmdW5jdGlvbiBGb28oKSB7XG4gKiAgICAgICB0aGlzLmEgPSAxXG4gKiAgICAgICB0aGlzLmIgPSAyXG4gKiAgICAgfVxuICpcbiAqICAgICBGb28ucHJvdG90eXBlLmMgPSAzXG4gKlxuICogICAgIGZvck93bihuZXcgRm9vLCAodmFsdWUsIGtleSkgPT4gY29uc29sZS5sb2coa2V5KSlcbiAqICAgICAvLz0+IExvZ3MgJ2EnIHRoZW4gJ2InIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpLlxuICpcbiAqL1xuZnVuY3Rpb24gZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUpIHtcbiAgY29uc3Qgb2JqID0gdG9PYmoob2JqZWN0KVxuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iailcbiAgICBoYXNPd25Qcm9wZXJ0eShvYmosIGtleSkgJiYgaXRlcmF0ZWUob2JqW2tleV0sIGtleSwgb2JqKVxuXG4gIHJldHVybiBvYmpcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JPd25cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUFBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0FBQ3pDQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQzNELFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUU7RUFDaENBLEdBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7RUFFekIsS0FBS0EsR0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHO0lBQ25CLEVBQUEsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBQTs7RUFFMUQsT0FBTyxHQUFHO0NBQ1g7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNOyJ9