You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Manipulating arrays in code is a very common operation. Whether you are creating a total for a shopping cart, grabbing only the first names out of a list of people, or moving a piece on a chessboard, you are probably going to be modifying or manipulating an array in some way.
9
+
Array manipulation is a common task in programming. Whether you are calculating a total for a shopping cart, grabbing only the first names from a list of people, or moving a piece on a chessboard, you are probably modifying or manipulating an array somewhere in the code.
10
+
<br>
10
11
11
12
## Requirements
12
13
13
14
- Fork this repo
14
15
- Clone it to your machine
15
-
16
+
<br>
16
17
17
18
18
19
## Submission
@@ -26,39 +27,91 @@ git push origin master
26
27
```
27
28
28
29
- Create a Pull Request so that your TAs can check your work.
30
+
<br>
31
+
32
+
33
+
34
+
## Automated Testing Introduction
29
35
36
+
### What is automated testing?
37
+
38
+
Automated software testing is the process of programmatically executing an application in order to validate and verify that it meets the business needs, as well as the technical requirements, and that it behaves as expected.
39
+
40
+
Testing should be viewed as a continuous process, not a discrete operation or single activity in the development lifecycle. Designing tests at the beginning of the product lifecycle can be help to mitigate common issues that arise when developing complex code bases.
41
+
42
+
Having a strong *test suite* can provide you ease of mind, since you will be able to confidently improve upon your work while knowing that your not breaking a previously developed feature.
30
43
<br>
31
44
45
+
### Testing labs
32
46
47
+
This LAB, along with some of the labs you will be working on during the bootcamp, is equipped with unit tests to provide automated feedback on your lab progress.
48
+
<br>
33
49
34
-
##Instructions
50
+
### Testing with Jasmine
35
51
36
-
You will work on the `src/functions-and-arrays.js` file, which is already loaded in the `index.html` file.
52
+
Jasmine is an automated testing framework for JavaScript. It is designed to be used in Behavior-driven Development (**BDD**) programming, which focuses more on the business value than on the technical details.
37
53
38
-
To run the JavaScript code open the `index.html` file use the [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) VSCode extension.
54
+
We have already included Jasmine in the project you just forked, so let's see how to use it to implement our code.
55
+
<br>
39
56
40
-
To see output of your JavaScript code open the [Console in the Developer Tools](https://developer.chrome.com/docs/devtools/open/#console).
57
+
### Usage
41
58
42
-
While following the instructions for each iteration, make sure to carefully read the instructions to fully understand the task requirements. Do not rush. You should take your time to carefully read every iteration.
59
+
Before start coding, we will explain the project structure we have provided you:
43
60
61
+
```
62
+
lab-js-functions-and-arrays
63
+
├── README.md
64
+
├── SpecRunner.html
65
+
├── jasmine
66
+
│ └── ...
67
+
├── src
68
+
│ └── functions-and-arrays.js
69
+
└── tests
70
+
└── functions-and-arrays.spec.js
71
+
```
44
72
73
+
We will be working with the `src/functions-and-arrays.js`. In the `jasmine` folder you can find all of the files needed to use Jasmine. All these files are already linked with the `SpecRunner.html` file.
45
74
46
-
### Note about tests
75
+
In case you want to check the tests, they are in the `tests/functions-and-arrays.spec.js` file.
47
76
48
-
This LAB, along with some of the labs you will be working on during the bootcamp, is equipped with unit tests to provide automated feedback on your lab progress.
49
77
50
-
**After you’ve completed the basic iterations**, go to the **"Test Your Code"** section at the bottom. There you'll be asked to install the testing dependencies and run the tests to check how many tests your code is passing.
78
+
#### Run tests
79
+
80
+
Running automated tests with Jasmine is super easy. All you need to do is open the `SpecRunner.html` file in your browser. You will find something similar to this:
You should write your code on the `src/functions-and-arrays.js` file. While following the instructions for each iteration, you should check every test and make sure it's *passing*, before moving on.
51
88
89
+
Do not rush. You should take your time to carefully read every iteration, and you should address the *breaking* tests as you progress through the exercise.
90
+
91
+
When coding with tests, it is super important that you carefully read and understand the errors you are getting, this way you will know for sure what's expected from your code.
92
+
93
+
To see output of your JavaScript code open the [Console in the Developer Tools](https://developer.chrome.com/docs/devtools/open/#console).
52
94
53
95
96
+
97
+
**Important:** Note that **you don't need to execute the functions yourself**; the tests will automatically load and execute the functions on each test run. All you need to do is declare the functions, ensure that they handle the parameters passed, and that they return what is indicated in the iteration instructions and the test description. For some iterations we provide you with a sample array, so that you can do some **manual** testing, if you wish.
98
+
<br>
99
+
100
+
101
+
## Instructions
102
+
103
+
While following the instructions for each iteration, make sure to carefully read the instructions and tests descriptions to fully understand the task requirements. Do not rush. You should take your time to carefully read every iteration.
104
+
54
105
<br>
55
106
56
107
### Iteration #1: Find the maximum
57
108
58
-
Implement the function `maxOfTwoNumbers` that takes two numbers as arguments and returns the largest.
109
+
Implement the function `maxOfTwoNumbers` that takes two numbers as arguments and returns the bigger number.
59
110
60
111
<br>
61
112
113
+
114
+
62
115
### Iteration #2: Find the longest word
63
116
64
117
Implement the function `findLongestWord` that takes as an argument an array of words and returns the longest one. If there are 2 with the same length, it should return the first occurrence.
Calculating a sum can be as simple as iterating over an array and adding each of the elements together.
77
136
78
137
Implement the function named `sumNumbers` that takes an array of numbers as an argument, and returns the sum of all of the numbers in the array. Later in the course we will learn how to do this by using the `reduce` array method, which will make your work significantly easier. For now, let's practice _"declarative"_ way adding values, using loops.
#### Bonus - Iteration #4.1: A generic `avg()` function
210
+
211
+
212
+
#### Bonus - Iteration #4.3: A generic `avg()` function
144
213
145
214
Create function `avg(arr)` that receives any mixed array and calculates average. Consider as mixed array an array filled with numbers and/or strings and/or booleans.
Take the following array, remove the duplicates, and return a new array. You are more than likely going to want to check out the [`indexOf`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)Array method.
233
+
Take the following array, remove the duplicates, and return a new array. You are more than likely going to want to check out the Array methods [`indexOf`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)and [`includes`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes).
163
234
164
235
Do this in the form of a function `uniquifyArray` that receives an array of words as a argument.
165
236
237
+
238
+
166
239
You can use the following array to test your solution:
167
240
168
241
```javascript
@@ -183,11 +256,15 @@ const words = [
183
256
184
257
<br>
185
258
259
+
260
+
186
261
### Iteration #6: Find elements
187
262
188
263
Let's create a simple array search.
189
264
190
-
Declare a function named `doesWordExist` that will take in an array of words as one argument, and a word to search for as the other. Return `true` if it exists, otherwise, return `false`. **Don't** use `indexOf` for this one.
265
+
Declare a function named `doesWordExist` that will take in an array of words as one argument, and a *word to search* for as the other. Return `true` if the word exists in the array, otherwise, return `false`.
266
+
267
+
191
268
192
269
You can use the following array to test your solution:
Declare a function named `howManyTimes` that will take in an array of words as the first argument, and a word to search for as the second argument. The function will return the number of times that word appears in the array.
@@ -221,11 +300,17 @@ const words = [
221
300
222
301
<br>
223
302
224
-
### Bonus - Iteration #8: Product of adjacent numbers
225
303
226
-
What is the greatest product of four adjacent numbers? We consider adjacent any four numbers that are next to each other horizontally or vertically.
227
304
228
-
For example, if we have a 5x5 Matrix like:
305
+
### Bonus - Iteration #8
306
+
307
+
308
+
309
+
#### Bonus - Iteration #8.1: Product of adjacent numbers
310
+
311
+
Given multiple arrays, find the greatest product of four adjacent numbers.
312
+
313
+
We consider adjacent any four numbers that are next to each other horizontally or vertically. For example, if we have a 5x5 Matrix like:
229
314
230
315
```bash
231
316
[ 1, 2, 3, 4, 5]
@@ -237,6 +322,10 @@ For example, if we have a 5x5 Matrix like:
237
322
238
323
The greatest product will be the `20`x`20`x`20`x`4` = `32000`.
239
324
325
+
<br>
326
+
327
+
328
+
240
329
Declare a function named `greatestProduct(matrix)` to find it in the 20×20 grid below!
241
330
242
331
```javascript
@@ -266,54 +355,14 @@ const matrix = [
266
355
267
356
<br>
268
357
269
-
### Bonus - Iteration #8.1: Product of diagonals
270
-
271
-
Following the logic you've used in iteration #8, declare a function called `greatestProductOfDiagonals(matrix)`. It takes a matrix as a parameter and returns the greatest product of any four values layed out diagonally, in either direction.
272
-
273
-
<br>
274
358
275
359
360
+
#### Bonus - Iteration #8.2: Product of diagonals
276
361
277
-
## Test Your Code
362
+
Following the logic you've used in iteration #8.1, declare a function called `greatestProductOfDiagonals(matrix)`. It takes a matrix as a parameter and returns the greatest product of any four values layed out diagonally, in either direction.
278
363
279
364
<br>
280
365
281
-
### Automated Testing
282
366
283
-
Automated software testing is the process of automatically testing an application in order to verify that it meets the technical requirements, and that it behaves as expected.
284
-
285
-
Having strong _test suites_ can provide you ease of mind, since you will be able to confidently improve upon your work while knowing that your not breaking a previously developed feature.
286
-
287
-
288
-
289
-
<br>
290
-
291
-
### Testing with Jest
292
-
293
-
Jest is an automated test-runner for JavaScript.
294
-
295
-
To run your tests, open your terminal at the root directory of the lab, run `npm install` to install your dependencies and `npm run test:watch` to run the tests and generate the `lab-solution.html` file.
296
-
297
-
```shell
298
-
$ cd lab-javascript-functions-and-arrays
299
-
$ npm install
300
-
$ npm run test:watch
301
-
```
302
-
303
-
<br>
304
-
305
-
In case you want to check the tests, they are in the `tests/functions-and-arrays.spec.js` file.
306
-
307
-
Open the `lab-solution.html` file using the [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer) VSCode extension.
308
-
309
-
<br>
310
-
311
-
#### Pass the tests
312
-
313
-
When coding with tests, it is super important that you carefully read and understand the errors you are getting, this way you will know for sure what's expected from your code.
314
-
315
-
Note that **you don't need to execute the functions yourself**, the tests are responsible for doing that. All you should do is declare them, make sure they deal with the parameters passed and that they return what is indicated on the iterations and in the test messages. For some iterations we provide you with a sample array, so that you can do some **manual** testing, if you wish.
0 commit comments