| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import isArguments from '../lang/isArguments';
- import isArray from '../lang/isArray';
- import isIndex from './isIndex';
- import isLength from './isLength';
- import keysIn from '../object/keysIn';
- /** Used for native method references. */
- var objectProto = Object.prototype;
- /** Used to check objects for own properties. */
- var hasOwnProperty = objectProto.hasOwnProperty;
- /**
- * A fallback implementation of `Object.keys` which creates an array of the
- * own enumerable property names of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
- function shimKeys(object) {
- var props = keysIn(object),
- propsLength = props.length,
- length = propsLength && object.length;
- var allowIndexes = !!length && isLength(length) &&
- (isArray(object) || isArguments(object));
- var index = -1,
- result = [];
- while (++index < propsLength) {
- var key = props[index];
- if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) {
- result.push(key);
- }
- }
- return result;
- }
- export default shimKeys;
|