-
Notifications
You must be signed in to change notification settings - Fork 0
/
challenges-01.test.js
157 lines (113 loc) · 5.38 KB
/
challenges-01.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
'use strict';
/* ------------------------------------------------------------------------------------------------
CHALLENGE 1
Write a function named greeting that takes in a string and returns the string in all uppercase letters.
Then, write a function named speaker that takes in a string and a callback function. The speaker function should return the string in all uppercase letters only by invoking the callback.
------------------------------------------------------------------------------------------------ */
const greeting = (word) => {
// Solution code here...
return word.toUpperCase();
};
const speaker = (message, callback) => {
// Solution code here...
const upper = callback(message);
return upper;
};
/* ------------------------------------------------------------------------------------------------
CHALLENGE 2
Write a function named addValues that takes in an array and a value
and pushes the value into the array. This function does not need a return statement.
Then, write a function named addNumbers that takes in four arguments:
- A number to be added to an array
- An array into which the number should be added
- The number of times the number should be added
USE addValues() ?? - A callback function to use to add the numbers to the array (Hint: you already defined it)
Within the addNumbers function, invoke the callback function as many times as necessary, based on the third argument of the addNumbers function.
Return the modified array.
------------------------------------------------------------------------------------------------ */
let arr = [];
const addValues = (arr, value) => {
arr.push(value);
};
const addNumbers = (num, arr, times, callback) => {
for (let i = 0; i < times; i++){
callback(arr, num);
};
return arr;
};
// addNumbers(8, arr, 5, addValues);
/* ------------------------------------------------------------------------------------------------
CHALLENGE 3
Write a function named createList that takes in an array of the current store intentory.
The inventory is formatted like this:
[
{ name: 'apples', available: true },
{ name: 'pears', available: true },
{ name: 'oranges', available: false },
{ name: 'bananas', available: true },
{ name: 'blueberries', available: false }
]
This function should use forEach to populate your grocery list based on the store's inventory. If the item is available, add it to your list. Return the final list.
------------------------------------------------------------------------------------------------ */
const createList = (availableItems) => {
const inStock = [];
availableItems.forEach(item => {
if (item.available === true){
inStock.push(item.name);
}
});
return inStock;
};
/* ------------------------------------------------------------------------------------------------
CHALLENGE 4
Write a function named fizzbuzz that takes in an array of numbers.
Iterate over the array using forEach to determine the output based on several rules:
- If a number is divisible by 3, add the word "Fizz" to the output array.
- If the number is divisible by 5, add the word "Buzz" to the output array.
- If the number is divisible by both 3 and 5, add the phrase "Fizz Buzz" to the output array.
- Otherwise, add the number to the output array.
Return the resulting output array.
------------------------------------------------------------------------------------------------ */
const fizzbuzz = (arr) => {
arr.forEach(num => {
if(num % 3 === 0 && num % 5 === 0){
arr.splice(num-1, 1, 'Fizz Buzz');
} else if(num % 5 === 0) {
arr.splice(num-1, 1, 'Buzz');
} else if(num % 3 === 0){
arr.splice(num-1, 1, 'Fizz');
}
});
return arr;
};
/* ------------------------------------------------------------------------------------------------
TESTS
All the code below will verify that your functions are working to solve the challenges.
DO NOT CHANGE any of the below code.
Run your tests from the console: jest challenges-01.test.js
------------------------------------------------------------------------------------------------ */
describe('Testing challenge 1', () => {
test('It should return the message with all uppercase characters', () => {
expect(speaker('hello 301 students!', greeting)).toStrictEqual('HELLO 301 STUDENTS!');
});
});
describe('Testing challenge 2', () => {
test('It should add the number 8 to the array five times', () => {
expect(addNumbers(8, [], 5, addValues)).toStrictEqual([8, 8, 8, 8, 8]);
expect(addNumbers(8, [], 5, addValues).length).toStrictEqual(5);
});
});
describe('Testing challenge 3', () => {
const inventory = [{ name: 'apples', available: true }, { name: 'pears', available: true }, { name: 'oranges', available: false }, { name: 'bananas', available: true }, { name: 'blueberries', available: false }];
test('It should only add the available items to the list', () => {
expect(createList(inventory)).toStrictEqual(['apples', 'pears', 'bananas']);
expect(createList(inventory).length).toStrictEqual(3);
});
});
describe('Testing challenge 4', () => {
const inputs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
test('It should print out messages or numbers', () => {
expect(fizzbuzz(inputs)).toStrictEqual([1, 2, 'Fizz', 4, 'Buzz', 'Fizz', 7, 8, 'Fizz', 'Buzz', 11, 'Fizz', 13, 14, 'Fizz Buzz', 16]);
expect(fizzbuzz(inputs).length).toStrictEqual(16);
});
});