From e6dd6f17ff9ed0dca7be31d0f44edbaa7c219ff8 Mon Sep 17 00:00:00 2001 From: Steven Chester Date: Tue, 25 Jun 2019 15:48:58 -0400 Subject: [PATCH] remove usage of the 'reduce...spread' pattern reduce usage of reduce spread pattern 1.1.1 remove reduce...spread pattern from added, updated, and deleted methods remove the reduce...spread pattern for perf gains reduce usage of reduce spread pattern 1.1.1 remove reduce...spread pattern from added, updated, and deleted methods --- src/added/index.js | 22 +++++++++++++++------- src/arrayDiff/index.js | 34 ++++++++++++++++++++++++++-------- src/deleted/index.js | 22 +++++++++++++++------- src/diff/index.js | 33 +++++++++++++++++++++++++-------- src/updated/index.js | 23 +++++++++++++++-------- 5 files changed, 96 insertions(+), 38 deletions(-) diff --git a/src/added/index.js b/src/added/index.js index 602d671..5240ef3 100644 --- a/src/added/index.js +++ b/src/added/index.js @@ -7,17 +7,25 @@ const addedDiff = (lhs, rhs) => { const l = properObject(lhs); const r = properObject(rhs); - return Object.keys(r).reduce((acc, key) => { - if (l.hasOwnProperty(key)) { - const difference = addedDiff(l[key], r[key]); + let changes = {} - if (isObject(difference) && isEmpty(difference)) return acc; + const rKeys = Object.keys(r) - return { ...acc, [key]: difference }; + for (let i = 0; i < rKeys.length; i++) { + const key = rKeys[i] + + if (!l.hasOwnProperty(key)) { + changes[key] = r[key] + continue } + const difference = addedDiff(l[key], r[key]); + + if (isObject(difference) && isEmpty(difference)) continue; + + changes[key] = difference + } - return { ...acc, [key]: r[key] }; - }, {}); + return changes }; export default addedDiff; diff --git a/src/arrayDiff/index.js b/src/arrayDiff/index.js index 46d22d4..906a5f7 100644 --- a/src/arrayDiff/index.js +++ b/src/arrayDiff/index.js @@ -8,9 +8,18 @@ const diff = (lhs, rhs) => { const l = properObject(lhs); const r = properObject(rhs); - const deletedValues = Object.keys(l).reduce((acc, key) => { - return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined }; - }, {}); + let changes = {} + + const lKeys = Object.keys(l) + + for (let i = 0; i < lKeys.length; i++) { + const key = lKeys[i] + + if (!r.hasOwnProperty(key)) { + changes[key] = undefined + } + } + if (isDate(l) || isDate(r)) { if (l.valueOf() == r.valueOf()) return {}; @@ -39,15 +48,24 @@ const diff = (lhs, rhs) => { }, deletedValues); } - return Object.keys(r).reduce((acc, key) => { - if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key + const rKeys = Object.keys(r) + + for (let i = 0; i < rKeys.length; i++) { + const key = rKeys[i] + + if (!l.hasOwnProperty(key)) { + changes[key] = r[key] + continue; + } const difference = diff(l[key], r[key]); - if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff + if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue; // return no diff + + changes[key] = difference + } - return { ...acc, [key]: difference }; // return updated key - }, deletedValues); + return changes }; export default diff; diff --git a/src/deleted/index.js b/src/deleted/index.js index 58e910a..194fa8c 100644 --- a/src/deleted/index.js +++ b/src/deleted/index.js @@ -6,17 +6,25 @@ const deletedDiff = (lhs, rhs) => { const l = properObject(lhs); const r = properObject(rhs); - return Object.keys(l).reduce((acc, key) => { - if (r.hasOwnProperty(key)) { - const difference = deletedDiff(l[key], r[key]); + let changes = {} - if (isObject(difference) && isEmpty(difference)) return acc; + const lKeys = Object.keys(l) - return { ...acc, [key]: difference }; + for (let i = 0; i < lKeys.length; i++) { + const key = lKeys[i] + + if (!r.hasOwnProperty(key)) { + changes[key] = undefined + continue } + const difference = deletedDiff(l[key], r[key]); + + if (isObject(difference) && isEmpty(difference)) continue; + + changes[key] = difference + } - return { ...acc, [key]: undefined }; - }, {}); + return changes }; export default deletedDiff; diff --git a/src/diff/index.js b/src/diff/index.js index 74b961b..3aa591e 100644 --- a/src/diff/index.js +++ b/src/diff/index.js @@ -8,24 +8,41 @@ const diff = (lhs, rhs) => { const l = properObject(lhs); const r = properObject(rhs); - const deletedValues = Object.keys(l).reduce((acc, key) => { - return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined }; - }, {}); + let changes = {} + + const lKeys = Object.keys(l) + + for (let i = 0; i < lKeys.length; i++) { + const key = lKeys[i] + + if (!r.hasOwnProperty(key)) { + changes[key] = undefined + } + } if (isDate(l) || isDate(r)) { if (l.valueOf() == r.valueOf()) return {}; return r; } - return Object.keys(r).reduce((acc, key) => { - if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key + const rKeys = Object.keys(r) + + for (let i = 0; i < rKeys.length; i++) { + const key = rKeys[i] + + if (!l.hasOwnProperty(key)) { + changes[key] = r[key] + continue; + } const difference = diff(l[key], r[key]); - if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff + if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue; // return no diff + + changes[key] = difference + } - return { ...acc, [key]: difference }; // return updated key - }, deletedValues); + return changes }; export default diff; diff --git a/src/updated/index.js b/src/updated/index.js index 4b01775..f661da9 100644 --- a/src/updated/index.js +++ b/src/updated/index.js @@ -14,18 +14,25 @@ const updatedDiff = (lhs, rhs) => { return r; } - return Object.keys(r).reduce((acc, key) => { - if (l.hasOwnProperty(key)) { - const difference = updatedDiff(l[key], r[key]); + let changes = {} - if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; + const rKeys = Object.keys(r) - return { ...acc, [key]: difference }; - } + for (let i = 0; i < rKeys.length; i++){ + const key = rKeys[i] - return acc; - }, {}); + if (!l.hasOwnProperty(key)) continue + + const difference = updatedDiff(l[key], r[key]); + + if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue; + + changes[key] = difference + + } + + return changes }; export default updatedDiff;