diff --git a/.internal/baseKeys.js b/.internal/baseKeys.js deleted file mode 100644 index 04ff372bc..000000000 --- a/.internal/baseKeys.js +++ /dev/null @@ -1,27 +0,0 @@ -import isPrototype from './isPrototype.js' - -/** Used to check objects for own properties. */ -const hasOwnProperty = Object.prototype.hasOwnProperty - -/** - * The base implementation of `keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - object = Object(object) - if (!isPrototype(object)) { - return Object.keys(object) - } - const result = [] - for (const key in object) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key) - } - } - return result -} - -export default baseKeys diff --git a/.internal/baseKeysIn.js b/.internal/baseKeysIn.js deleted file mode 100644 index 60bc2f210..000000000 --- a/.internal/baseKeysIn.js +++ /dev/null @@ -1,34 +0,0 @@ -import isObject from '../isObject.js' -import isPrototype from './isPrototype.js' - -/** Used to check objects for own properties. */ -const hasOwnProperty = Object.prototype.hasOwnProperty - -/** - * The base implementation of `keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - const result = [] - if (object == null) { - return result - } - if (!isObject(object)) { - for (const key in Object(object)) { - result.push(key) - } - return result - } - const isProto = isPrototype(object) - for (const key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key) - } - } - return result -} - -export default baseKeysIn diff --git a/.internal/getAllKeysIn.js b/.internal/getAllKeysIn.js index 84c30a4e4..c9714e131 100644 --- a/.internal/getAllKeysIn.js +++ b/.internal/getAllKeysIn.js @@ -1,5 +1,4 @@ import getSymbolsIn from './getSymbolsIn.js' -import baseKeysIn from './baseKeysIn.js' /** * Creates an array of own and inherited enumerable property names and symbols of `object`. @@ -9,7 +8,10 @@ import baseKeysIn from './baseKeysIn.js' * @returns {Array} Returns the array of property names and symbols. */ function getAllKeysIn(object) { - const result = baseKeysIn(object) + const result = [] + for (const key in object) { + result.push(key) + } if (!Array.isArray(object)) { result.push(...getSymbolsIn(object)) } diff --git a/defaults.js b/defaults.js index eb552bd68..99e234dbd 100644 --- a/defaults.js +++ b/defaults.js @@ -1,5 +1,4 @@ import eq from './eq.js' -import baseKeysIn from './.internal/baseKeysIn.js' /** Used for built-in method references. */ const objectProto = Object.prototype @@ -28,22 +27,18 @@ const hasOwnProperty = objectProto.hasOwnProperty */ function defaults(object, ...sources) { object = Object(object) - let srcIndex = -1 - const srcLength = sources.length - while (++srcIndex < srcLength) { - const source = sources[srcIndex] - const props = baseKeysIn(source) - let propsIndex = -1 - const propsLength = props.length - while (++propsIndex < propsLength) { - const key = props[propsIndex] - const value = object[key] - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key] + sources.forEach((source) => { + if (source != null) { + source = Object(source) + for (const key in source) { + const value = object[key] + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key] + } } } - } + }) return object } diff --git a/isEmpty.js b/isEmpty.js index 6b5d82499..9876cc38d 100644 --- a/isEmpty.js +++ b/isEmpty.js @@ -1,4 +1,3 @@ -import baseKeys from './.internal/baseKeys.js' import getTag from './.internal/getTag.js' import isArguments from './isArguments.js' import isArrayLike from './isArrayLike.js' @@ -54,7 +53,7 @@ function isEmpty(value) { return !value.size } if (isPrototype(value)) { - return !baseKeys(value).length + return !Object.keys(value).length } for (const key in value) { if (hasOwnProperty.call(value, key)) { diff --git a/keys.js b/keys.js index 0af002410..43b241c11 100644 --- a/keys.js +++ b/keys.js @@ -1,5 +1,4 @@ import arrayLikeKeys from './.internal/arrayLikeKeys.js' -import baseKeys from './.internal/baseKeys.js' import isArrayLike from './isArrayLike.js' /** @@ -30,7 +29,9 @@ import isArrayLike from './isArrayLike.js' * // => ['0', '1'] */ function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object) + return isArrayLike(object) + ? arrayLikeKeys(object) + : Object.keys(Object(object)) } export default keys diff --git a/size.js b/size.js index 5b2c40ef4..831011e56 100644 --- a/size.js +++ b/size.js @@ -1,4 +1,3 @@ -import baseKeys from './.internal/baseKeys.js' import getTag from './.internal/getTag.js' import isArrayLike from './isArrayLike.js' import isString from './isString.js' @@ -38,7 +37,7 @@ function size(collection) { if (tag == mapTag || tag == setTag) { return collection.size } - return baseKeys(collection).length + return Object.keys(collection).length } export default size