foop
Version:
interfaces that describe their intentions.
68 lines (66 loc) • 5.58 kB
JavaScript
var ENV_PERF = require('../env/preferPerf')
var EMPTY_OBJ = require('../native/EMPTY_OBJ')
var preAllocate = require('../array/preAllocate')
var isObj = require('../is/obj')
var isArray = require('../is/array')
var ObjectKeys = require('./keys')
/**
* Creates an array of the own enumerable property names of `object`.
* **Note:** Non-object values are coerced to objects. See the
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
* for more details.
*
* @since 0.1.0
* @category Object
* @name keysObjOrArray
*
* @param {Object|Array|Map|Set} obj The object to query, or value to pre-allocate with
* @return {Array} Returns the array of property names, or preallocated array
*
* @see deps/util/lengthFromZero
* @see deps/util/props
* @see util/values
* @see util/valuesIn
*
* {@link https://github.com/jashkenas/underscore/blob/master/underscore.js#L988 underscore-all-keys}
* {@link https://github.com/ramda/ramda/blob/master/src/keys.js ramda-keys}
* {@link https://github.com/lodash/lodash/blob/master/keys.js lodash-keys}
* {@link https://github.com/lodash/lodash/blob/master/.internal/getAllKeys.js lodash-get-all-keys}
* @see {@link lodash-keys}
* @see {@link lodash-get-all-keys}
* @see {@link ramda-keys}
* @see {@link underscore-all-keys}
*
* @TODO https://github.com/lodash/lodash/blob/master/.internal/arrayLikeKeys.js
*
* @example
*
* function Foo() {
* this.a = 1
* this.b = 2
* }
*
* Foo.prototype.c = 3
*
* keys(new Foo)
* //=> ['a', 'b'] (iteration order is not guaranteed)
*
* keys('hi')
* //=> ['0', '1']
*
*/
module.exports = function keys(obj) {
return isArray(obj)
// preAllocate(obj)
? obj
: isObj(obj)
? ObjectKeys(obj)
// @TODO
// ? hasOwnProperty(obj, 'keys')
// ? castIteratorToArray(obj.keys())
// : ObjectKeys(obj)
: ENV_PERF
? EMPTY_OBJ
: []
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c09iak9yQXJyYXkuanMiLCJzb3VyY2VzIjpbImtleXNPYmpPckFycmF5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVOVl9QRVJGID0gcmVxdWlyZSgnLi4vZW52L3ByZWZlclBlcmYnKVxuY29uc3QgRU1QVFlfT0JKID0gcmVxdWlyZSgnLi4vbmF0aXZlL0VNUFRZX09CSicpXG5jb25zdCBwcmVBbGxvY2F0ZSA9IHJlcXVpcmUoJy4uL2FycmF5L3ByZUFsbG9jYXRlJylcbmNvbnN0IGlzT2JqID0gcmVxdWlyZSgnLi4vaXMvb2JqJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBPYmplY3RLZXlzID0gcmVxdWlyZSgnLi9rZXlzJylcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQG5hbWUga2V5c09iak9yQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheXxNYXB8U2V0fSBvYmogVGhlIG9iamVjdCB0byBxdWVyeSwgb3IgdmFsdWUgdG8gcHJlLWFsbG9jYXRlIHdpdGhcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcywgb3IgcHJlYWxsb2NhdGVkIGFycmF5XG4gKlxuICogQHNlZSBkZXBzL3V0aWwvbGVuZ3RoRnJvbVplcm9cbiAqIEBzZWUgZGVwcy91dGlsL3Byb3BzXG4gKiBAc2VlIHV0aWwvdmFsdWVzXG4gKiBAc2VlIHV0aWwvdmFsdWVzSW5cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc2hrZW5hcy91bmRlcnNjb3JlL2Jsb2IvbWFzdGVyL3VuZGVyc2NvcmUuanMjTDk4OCB1bmRlcnNjb3JlLWFsbC1rZXlzfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9yYW1kYS9yYW1kYS9ibG9iL21hc3Rlci9zcmMva2V5cy5qcyByYW1kYS1rZXlzfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyL2tleXMuanMgbG9kYXNoLWtleXN9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi9tYXN0ZXIvLmludGVybmFsL2dldEFsbEtleXMuanMgbG9kYXNoLWdldC1hbGwta2V5c31cbiAqIEBzZWUge0BsaW5rIGxvZGFzaC1rZXlzfVxuICogQHNlZSB7QGxpbmsgbG9kYXNoLWdldC1hbGwta2V5c31cbiAqIEBzZWUge0BsaW5rIHJhbWRhLWtleXN9XG4gKiBAc2VlIHtAbGluayB1bmRlcnNjb3JlLWFsbC1rZXlzfVxuICpcbiAqIEBUT0RPIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyLy5pbnRlcm5hbC9hcnJheUxpa2VLZXlzLmpzXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgZnVuY3Rpb24gRm9vKCkge1xuICogICAgICAgdGhpcy5hID0gMVxuICogICAgICAgdGhpcy5iID0gMlxuICogICAgIH1cbiAqXG4gKiAgICAgRm9vLnByb3RvdHlwZS5jID0gM1xuICpcbiAqICAgICBrZXlzKG5ldyBGb28pXG4gKiAgICAgLy89PiBbJ2EnLCAnYiddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXG4gKlxuICogICAgIGtleXMoJ2hpJylcbiAqICAgICAvLz0+IFsnMCcsICcxJ11cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgcmV0dXJuIGlzQXJyYXkob2JqKVxuICAgIC8vIHByZUFsbG9jYXRlKG9iailcbiAgICA/IG9ialxuICAgIDogaXNPYmoob2JqKVxuICAgICAgPyBPYmplY3RLZXlzKG9iailcbiAgICAgIC8vIEBUT0RPXG4gICAgICAvLyA/IGhhc093blByb3BlcnR5KG9iaiwgJ2tleXMnKVxuICAgICAgLy8gICA/IGNhc3RJdGVyYXRvclRvQXJyYXkob2JqLmtleXMoKSlcbiAgICAgIC8vICAgOiBPYmplY3RLZXlzKG9iailcbiAgICAgIDogRU5WX1BFUkZcbiAgICAgICAgPyBFTVBUWV9PQkpcbiAgICAgICAgOiBbXVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDN0NBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0FBQ2hEQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztBQUNuREEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ2xDQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQ3BDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0VBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQzs7TUFFZixHQUFHO01BQ0gsS0FBSyxDQUFDLEdBQUcsQ0FBQztRQUNSLFVBQVUsQ0FBQyxHQUFHLENBQUM7Ozs7O1FBS2YsUUFBUTtVQUNOLFNBQVM7VUFDVCxFQUFFO0NBQ1g7In0=