Skip to content

Commit cd89aa1

Browse files
committed
refactored mode's function
1 parent 5c349f2 commit cd89aa1

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

Sprint-2/stretch/mode.js

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,38 @@
88
// refactor calculateMode by splitting up the code
99
// into smaller functions using the stages above
1010

11-
function calculateMode(list) {
12-
// track frequency of each value
13-
let freqs = new Map();
11+
function trackFrequency(list) {
12+
let frequency = new Map();
1413

1514
for (let num of list) {
1615
if (typeof num !== "number") {
1716
continue;
1817
}
1918

20-
freqs.set(num, (freqs.get(num) || 0) + 1);
19+
frequency.set(num, (frequency.get(num) || 0) + 1);
2120
}
21+
return frequency;
22+
}
2223

23-
// Find the value with the highest frequency
24+
function highestFrequency(frequencyArray) {
2425
let maxFreq = 0;
2526
let mode;
26-
for (let [num, freq] of freqs) {
27+
for (let [num, freq] of frequencyArray) {
2728
if (freq > maxFreq) {
2829
mode = num;
2930
maxFreq = freq;
3031
}
3132
}
32-
3333
return maxFreq === 0 ? NaN : mode;
3434
}
3535

36+
function calculateMode(list) {
37+
// track frequency of each value
38+
const frequencyArray = trackFrequency(list);
39+
40+
// Find the value with the highest frequency
41+
42+
return highestFrequency(frequencyArray);
43+
}
44+
3645
module.exports = calculateMode;

Sprint-2/stretch/mode.test.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@ const calculateMode = require("./mode.js");
1313

1414
describe("calculateMode()", () => {
1515
test("returns the most frequent number in an array", () => {
16-
const nums = [2, 4, 1, 2, 3, 2, 1];
16+
const numArray = [2, 4, 1, 2, 3, 2, 1];
1717

18-
expect(calculateMode(nums)).toEqual(2);
18+
expect(calculateMode(numArray)).toEqual(2);
1919
});
2020

2121
test("returns the first mode in case of multiple modes", () => {
22-
const nums = [1, 2, 2, 3, 3];
22+
const numArray = [1, 2, 2, 3, 3];
2323

24-
expect(calculateMode(nums)).toEqual(2);
24+
expect(calculateMode(numArray)).toEqual(2);
2525
});
2626

2727
test("ignores non-number values", () => {
28-
const nums = [1, 3, "2", 2, 3, null];
28+
const numArray = [1, 3, "2", 2, 3, null];
2929

30-
expect(calculateMode(nums)).toEqual(3);
30+
expect(calculateMode(numArray)).toEqual(3);
3131
});
3232
});

0 commit comments

Comments
 (0)