From aa5e1b2fe0530f7d62b5683c8e472deed9f1174c Mon Sep 17 00:00:00 2001 From: John-David Dalton Date: Sun, 16 Apr 2017 15:30:42 -0500 Subject: [PATCH] Fix object coercion. --- .internal/baseKeys.js | 5 +++-- everyValue.js | 4 +++- filterObject.js | 4 +++- forOwn.js | 5 ++--- mapKey.js | 4 +++- mapValue.js | 4 +++- someValue.js | 4 +++- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/.internal/baseKeys.js b/.internal/baseKeys.js index 7e4e2a5db..04ff372bc 100644 --- a/.internal/baseKeys.js +++ b/.internal/baseKeys.js @@ -11,11 +11,12 @@ const hasOwnProperty = Object.prototype.hasOwnProperty * @returns {Array} Returns the array of property names. */ function baseKeys(object) { + object = Object(object) if (!isPrototype(object)) { - return Object.keys(Object(object)) + return Object.keys(object) } const result = [] - for (const key in Object(object)) { + for (const key in object) { if (hasOwnProperty.call(object, key) && key != 'constructor') { result.push(key) } diff --git a/everyValue.js b/everyValue.js index 5799e91c2..bec5e7aac 100644 --- a/everyValue.js +++ b/everyValue.js @@ -20,7 +20,9 @@ * // => false */ function everyValue(object, predicate) { - const props = Object.keys(Object(object)) + object = Object(object) + const props = Object.keys(object) + for (const key of props) { if (!predicate(object[key], key, object)) { return false diff --git a/filterObject.js b/filterObject.js index 190e82bad..71c017e8c 100644 --- a/filterObject.js +++ b/filterObject.js @@ -17,8 +17,10 @@ * // => [5, 10] */ function filterObject(object, predicate) { + object = Object(object) const result = [] - Object.keys(Object(object)).forEach((key) => { + + Object.keys(object).forEach((key) => { const value = object[key] if (predicate(value, key, object)) { result.push(value) diff --git a/forOwn.js b/forOwn.js index a7d3f55e6..40ea48b25 100644 --- a/forOwn.js +++ b/forOwn.js @@ -24,9 +24,8 @@ * // => Logs 'a' then 'b' (iteration order is not guaranteed). */ function forOwn(object, iteratee) { - if (object != null) { - Object.keys(Object(object)).forEach((key) => iteratee(object[key], key, object)) - } + object = Object(object) + Object.keys(object).forEach((key) => iteratee(object[key], key, object)) } export default forOwn diff --git a/mapKey.js b/mapKey.js index 7405a2ccc..a69e5b2d3 100644 --- a/mapKey.js +++ b/mapKey.js @@ -18,8 +18,10 @@ * // => { 'a1': 1, 'b2': 2 } */ function mapKey(object, iteratee) { + object = Object(object) const result = {} - Object.keys(Object(object)).forEach((key) => { + + Object.keys(object).forEach((key) => { const value = object[key] result[iteratee(value, key, object)] = value }) diff --git a/mapValue.js b/mapValue.js index e7820ce99..d8d9aa779 100644 --- a/mapValue.js +++ b/mapValue.js @@ -21,8 +21,10 @@ * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) */ function mapValue(object, iteratee) { + object = Object(object) const result = {} - Object.keys(Object(object)).forEach((key) => { + + Object.keys(object).forEach((key) => { result[key] = iteratee(object[key], key, object) }) return result diff --git a/someValue.js b/someValue.js index e55253204..a85f0028a 100644 --- a/someValue.js +++ b/someValue.js @@ -15,7 +15,9 @@ * // => true */ function someValues(object, predicate) { - const props = Object.keys(Object(object)) + object = Object(object) + const props = Object.keys(object) + for (const key of props) { if (predicate(object[key], key, object)) { return true