forked from bloominstituteoftechnology/JavaScript-II
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcallbacks.js
More file actions
133 lines (88 loc) · 3.59 KB
/
callbacks.js
File metadata and controls
133 lines (88 loc) · 3.59 KB
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
// Create a higher order function and invoke the callback function to test your work. You have been provided an example of a problem and a solution to see how this works with our items array. Study both the problem and the solution to figure out the rest of the problems.
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
/*
// GIVEN THIS PROBLEM:
function firstItem(arr, cb) {
// firstItem passes the first item of the given array to the callback function.
}
// SOLUTION:
function firstItem(arr, cb) {
return cb(arr[0]);
}
// NOTES ON THE SOLUTION:
// firstItem is a higher order function.
// It expects a callback (referred to as `cb`) as its second argument.
// To test our solution, we can use the given `items` array and a variety of callbacks.
// Note how callbacks can be declared separately, or inlined.
// TEST 1 (inlined callback):
const test1 = firstItem(items, item => `I love my ${item}!`);
console.log(test1); // "I love my Pencil!"
// TEST 2 (declaring callback before hand):
function logExorbitantPrice(article) {
return `this ${article} is worth a million dollars!`;
};
const test2 = firstItem(items, logExorbitantPrice);
console.log(test2); // "this Pencil is worth a million dollars!"
*/
//Number 1
function getLength(arr, cb) {
// getLength passes the length of the array into the callback.
return cb(arr.length);
}
const testGetLength = getLength(items, (length) => `${length} is the length of this array.`);
console.log(testGetLength);
//Number 2
function last(arr, cb) {
// last passes the last item of the array into the callback.
return cb(arr[arr.length - 1]);
}
function lastInArray(item) {
return `${item} is the last item in this array.`;
}
const testLast = last(items, lastInArray);
console.log(testLast);
//Number 3
function sumNums(x, y, cb) {
// sumNums adds two numbers (x, y) and passes the result to the callback.
return cb(x + y, x, y);
}
const testSumNums = sumNums(4, 5, (total, x, y) => {return `The sum of ${x} and ${y} is ${total}.`})
console.log(testSumNums);
//Number 4
function multiplyNums(x, y, cb) {
// multiplyNums multiplies two numbers and passes the result to the callback.
return cb(x * y, x, y);
}
function returnMultiResult(total, num1, num2) {
return `${num1} times ${num2} is ${total}.`
}
const testMultiplyNums = multiplyNums(2, 5, returnMultiResult);
console.log(testMultiplyNums);
//Number 5
function contains(item, list, cb) {
// contains checks if an item is present inside of the given array/list.
// Pass true to the callback if it is, otherwise pass false.
// .includes() is a function that checks if an item is in an array,
// then, it returns true or false
const answer = list.includes(item);
return cb(answer, item);
}
const testContains = contains('Pencil', items, (answer, item) => `It is ${answer} that this array contains the word '${item}'`);
console.log(testContains);
/* STRETCH PROBLEM */
const itemsTwo = ['Pencil', 'Notebook', 'yo-yo', 'Gum', 'yo-yo', 'Gum'];
function removeDuplicates(array, cb) {
// removeDuplicates removes all duplicate values from the given array.
// Pass the duplicate free array to the callback function.
// Do not mutate the original array.
// A Set stores data and removes duplicates,
// we convert Set into an array by using Array.from() getting data
// from the parameter array which in this case is itemsTwo
let noDup = Array.from(new Set(array));
return cb(noDup);
}
const testRemoveDuplicates = removeDuplicates(itemsTwo, (noDup) => {
return noDup;
})
console.log(testRemoveDuplicates);
console.log(itemsTwo);