UNPKG

foop

Version:

interfaces that describe their intentions.

68 lines (66 loc) 5.58 kB
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=