Skip to content

Commit e6dd6f1

Browse files
author
Steven Chester
committedJul 1, 2019
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
1 parent 6296889 commit e6dd6f1

File tree

5 files changed

+96
-38
lines changed

5 files changed

+96
-38
lines changed
 

‎src/added/index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,25 @@ const addedDiff = (lhs, rhs) => {
77
const l = properObject(lhs);
88
const r = properObject(rhs);
99

10-
return Object.keys(r).reduce((acc, key) => {
11-
if (l.hasOwnProperty(key)) {
12-
const difference = addedDiff(l[key], r[key]);
10+
let changes = {}
1311

14-
if (isObject(difference) && isEmpty(difference)) return acc;
12+
const rKeys = Object.keys(r)
1513

16-
return { ...acc, [key]: difference };
14+
for (let i = 0; i < rKeys.length; i++) {
15+
const key = rKeys[i]
16+
17+
if (!l.hasOwnProperty(key)) {
18+
changes[key] = r[key]
19+
continue
1720
}
21+
const difference = addedDiff(l[key], r[key]);
22+
23+
if (isObject(difference) && isEmpty(difference)) continue;
24+
25+
changes[key] = difference
26+
}
1827

19-
return { ...acc, [key]: r[key] };
20-
}, {});
28+
return changes
2129
};
2230

2331
export default addedDiff;

‎src/arrayDiff/index.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,18 @@ const diff = (lhs, rhs) => {
88
const l = properObject(lhs);
99
const r = properObject(rhs);
1010

11-
const deletedValues = Object.keys(l).reduce((acc, key) => {
12-
return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined };
13-
}, {});
11+
let changes = {}
12+
13+
const lKeys = Object.keys(l)
14+
15+
for (let i = 0; i < lKeys.length; i++) {
16+
const key = lKeys[i]
17+
18+
if (!r.hasOwnProperty(key)) {
19+
changes[key] = undefined
20+
}
21+
}
22+
1423

1524
if (isDate(l) || isDate(r)) {
1625
if (l.valueOf() == r.valueOf()) return {};
@@ -39,15 +48,24 @@ const diff = (lhs, rhs) => {
3948
}, deletedValues);
4049
}
4150

42-
return Object.keys(r).reduce((acc, key) => {
43-
if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key
51+
const rKeys = Object.keys(r)
52+
53+
for (let i = 0; i < rKeys.length; i++) {
54+
const key = rKeys[i]
55+
56+
if (!l.hasOwnProperty(key)) {
57+
changes[key] = r[key]
58+
continue;
59+
}
4460

4561
const difference = diff(l[key], r[key]);
4662

47-
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff
63+
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue; // return no diff
64+
65+
changes[key] = difference
66+
}
4867

49-
return { ...acc, [key]: difference }; // return updated key
50-
}, deletedValues);
68+
return changes
5169
};
5270

5371
export default diff;

‎src/deleted/index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,25 @@ const deletedDiff = (lhs, rhs) => {
66
const l = properObject(lhs);
77
const r = properObject(rhs);
88

9-
return Object.keys(l).reduce((acc, key) => {
10-
if (r.hasOwnProperty(key)) {
11-
const difference = deletedDiff(l[key], r[key]);
9+
let changes = {}
1210

13-
if (isObject(difference) && isEmpty(difference)) return acc;
11+
const lKeys = Object.keys(l)
1412

15-
return { ...acc, [key]: difference };
13+
for (let i = 0; i < lKeys.length; i++) {
14+
const key = lKeys[i]
15+
16+
if (!r.hasOwnProperty(key)) {
17+
changes[key] = undefined
18+
continue
1619
}
20+
const difference = deletedDiff(l[key], r[key]);
21+
22+
if (isObject(difference) && isEmpty(difference)) continue;
23+
24+
changes[key] = difference
25+
}
1726

18-
return { ...acc, [key]: undefined };
19-
}, {});
27+
return changes
2028
};
2129

2230
export default deletedDiff;

‎src/diff/index.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,41 @@ const diff = (lhs, rhs) => {
88
const l = properObject(lhs);
99
const r = properObject(rhs);
1010

11-
const deletedValues = Object.keys(l).reduce((acc, key) => {
12-
return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined };
13-
}, {});
11+
let changes = {}
12+
13+
const lKeys = Object.keys(l)
14+
15+
for (let i = 0; i < lKeys.length; i++) {
16+
const key = lKeys[i]
17+
18+
if (!r.hasOwnProperty(key)) {
19+
changes[key] = undefined
20+
}
21+
}
1422

1523
if (isDate(l) || isDate(r)) {
1624
if (l.valueOf() == r.valueOf()) return {};
1725
return r;
1826
}
1927

20-
return Object.keys(r).reduce((acc, key) => {
21-
if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key
28+
const rKeys = Object.keys(r)
29+
30+
for (let i = 0; i < rKeys.length; i++) {
31+
const key = rKeys[i]
32+
33+
if (!l.hasOwnProperty(key)) {
34+
changes[key] = r[key]
35+
continue;
36+
}
2237

2338
const difference = diff(l[key], r[key]);
2439

25-
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff
40+
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue; // return no diff
41+
42+
changes[key] = difference
43+
}
2644

27-
return { ...acc, [key]: difference }; // return updated key
28-
}, deletedValues);
45+
return changes
2946
};
3047

3148
export default diff;

‎src/updated/index.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,25 @@ const updatedDiff = (lhs, rhs) => {
1414
return r;
1515
}
1616

17-
return Object.keys(r).reduce((acc, key) => {
1817

19-
if (l.hasOwnProperty(key)) {
20-
const difference = updatedDiff(l[key], r[key]);
18+
let changes = {}
2119

22-
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc;
20+
const rKeys = Object.keys(r)
2321

24-
return { ...acc, [key]: difference };
25-
}
22+
for (let i = 0; i < rKeys.length; i++){
23+
const key = rKeys[i]
2624

27-
return acc;
28-
}, {});
25+
if (!l.hasOwnProperty(key)) continue
26+
27+
const difference = updatedDiff(l[key], r[key]);
28+
29+
if (isObject(difference) && isEmpty(difference) && !isDate(difference)) continue;
30+
31+
changes[key] = difference
32+
33+
}
34+
35+
return changes
2936
};
3037

3138
export default updatedDiff;

0 commit comments

Comments
 (0)