Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / chain-able-deps   js

Repository URL to install this package:

Version: 6.0.4 

/ src / loop / each / baseFor.ts

import {
  IteratableValue,
  IterateeFunction,
  Property,
} from './typings.loop.each'

export interface BaseForIteratee<Obj, KeyReturn> extends Function {
  (x: Obj[keyof Obj], key: KeyReturn, obj: Obj): boolean | void
}

/**
 * The base implementation of `baseForOwn` which iterates over `object`
 * properties returned by `keysFunc` and invokes `iteratee` for each property.
 * Iteratee functions may exit iteration early by explicitly returning `false`.
 * @since 5.0.0-beta.6
 * @memberOf loop
 *
 * @param object The object to iterate over.
 * @param iteratee The function invoked per iteration.
 * @param keysFunc The function to get the keys of `object`.
 * @return Returns `object`.
 *
 */
function baseFor<Obj extends {} | any, KeyReturn = any>(
  object: Obj,
  iteratee: BaseForIteratee<Obj, KeyReturn>,
  keysFunc: (x: Obj) => KeyReturn[]
) {
  const iterable = Object(object)
  const props = keysFunc(object)
  let { length } = props
  let index = -1

  while (length--) {
    const key = props[++index]
    if (iteratee(iterable[key], key, iterable) === false) {
      break
    }
  }
  return object
}

export default baseFor