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;