foop
Version:
interfaces that describe their intentions.
54 lines (49 loc) • 4.01 kB
JavaScript
var isTrue = require('../is/true')
var preAllocate = require('../array/preAllocate')
var hasOwnProperty = require('./hasOwnProperty')
/**
* @name keysIn
* @version 1.0.0 uncommented, used preAllocate
* @version 0.0.1 just comment
* @since 5.0.0
*
* @param {Object|Array} obj object to call `for in` on
* @param {boolean} [guard=false] only accept `hasOwnProperty`
* @return {Array} keys from obj
*
* {@link https://github.com/ramda/ramda/blob/master/src/keysIn.js ramda-keys-in}
* @see {@link ramda-keys-in}
* @see array/preAllocate
* @see util/hasOwnProperty
*
* @tests keys
*
* @example
*
* keysIn([1, 2]) //=> [0, 1]
* keysIn({one: 1, two: 2}) //=> ['one', 'two']
*
*/
module.exports = function keysIn(obj, guard) {
var result = preAllocate(obj)
var index = 0
// eslint-disable-next-line
// for (const key in obj) hasOwnProperty(obj, key) && (result[index++] = key)
for (var key in obj) {
/**
* when we have a guard, check ownProperty, otherwise just assign
*
* also written as pseudo:
* ```
* if (guard)
* if (hasOwnProperty) assign
* else result[index++] = key
* ```
*/
if (!isTrue(guard) || hasOwnProperty(obj, key)) {
result[index++] = key
}
}
return result
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c0luLmpzIiwic291cmNlcyI6WyJrZXlzSW4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNUcnVlID0gcmVxdWlyZSgnLi4vaXMvdHJ1ZScpXG5jb25zdCBwcmVBbGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ByZUFsbG9jYXRlJylcbmNvbnN0IGhhc093blByb3BlcnR5ID0gcmVxdWlyZSgnLi9oYXNPd25Qcm9wZXJ0eScpXG5cbi8qKlxuICogQG5hbWUga2V5c0luXG4gKiBAdmVyc2lvbiAxLjAuMCB1bmNvbW1lbnRlZCwgdXNlZCBwcmVBbGxvY2F0ZVxuICogQHZlcnNpb24gMC4wLjEganVzdCBjb21tZW50XG4gKiBAc2luY2UgNS4wLjBcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R8QXJyYXl9IG9iaiBvYmplY3QgdG8gY2FsbCBgZm9yIGluYCBvblxuICogQHBhcmFtICB7Ym9vbGVhbn0gW2d1YXJkPWZhbHNlXSBvbmx5IGFjY2VwdCBgaGFzT3duUHJvcGVydHlgXG4gKiBAcmV0dXJuIHtBcnJheX0ga2V5cyBmcm9tIG9ialxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vcmFtZGEvcmFtZGEvYmxvYi9tYXN0ZXIvc3JjL2tleXNJbi5qcyByYW1kYS1rZXlzLWlufVxuICogQHNlZSB7QGxpbmsgcmFtZGEta2V5cy1pbn1cbiAqIEBzZWUgYXJyYXkvcHJlQWxsb2NhdGVcbiAqIEBzZWUgdXRpbC9oYXNPd25Qcm9wZXJ0eVxuICpcbiAqIEB0ZXN0cyBrZXlzXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBrZXlzSW4oWzEsIDJdKSAgICAgICAgICAgLy89PiBbMCwgMV1cbiAqICAgIGtleXNJbih7b25lOiAxLCB0d286IDJ9KSAvLz0+IFsnb25lJywgJ3R3byddXG4gKlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGtleXNJbihvYmosIGd1YXJkKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHByZUFsbG9jYXRlKG9iailcbiAgbGV0IGluZGV4ID0gMFxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAvLyBmb3IgKGNvbnN0IGtleSBpbiBvYmopIGhhc093blByb3BlcnR5KG9iaiwga2V5KSAmJiAocmVzdWx0W2luZGV4KytdID0ga2V5KVxuXG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIC8qKlxuICAgICAqIHdoZW4gd2UgaGF2ZSBhIGd1YXJkLCBjaGVjayBvd25Qcm9wZXJ0eSwgb3RoZXJ3aXNlIGp1c3QgYXNzaWduXG4gICAgICpcbiAgICAgKiBhbHNvIHdyaXR0ZW4gYXMgcHNldWRvOlxuICAgICAqIGBgYFxuICAgICAqICAgaWYgKGd1YXJkKVxuICAgICAqICAgICBpZiAoaGFzT3duUHJvcGVydHkpIGFzc2lnblxuICAgICAqICAgZWxzZSByZXN1bHRbaW5kZXgrK10gPSBrZXlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBpZiAoIWlzVHJ1ZShndWFyZCkgfHwgaGFzT3duUHJvcGVydHkob2JqLCBrZXkpKSB7XG4gICAgICByZXN1bHRbaW5kZXgrK10gPSBrZXlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDcENBLEdBQUssQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDO0FBQ25EQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCbEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFO0VBQzNDQSxHQUFLLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7RUFDL0JDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQzs7Ozs7RUFLYixLQUFLRCxHQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRTs7Ozs7Ozs7Ozs7SUFXckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO01BQzlDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUc7S0FDdEI7R0FDRjs7RUFFRCxPQUFPLE1BQU07Q0FDZDsifQ==