Skip to content

Commit a45b3aa

Browse files
Merge branch 'main' into ch-12-objects
2 parents 38bbb44 + 989244a commit a45b3aa

37 files changed

+555
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
let launchReady = false;
2+
let fuelLevel = 27000;
3+
4+
if (fuelLevel >= 20000) {
5+
console.log('Fuel level cleared.');
6+
launchReady = true;
7+
} else {
8+
console.log('WARNING: Insufficient fuel!');
9+
launchReady = false;
10+
}
11+
12+
if (launchReady) {
13+
console.log("10, 9, 8...");
14+
console.log("Fed parrot...");
15+
console.log("6, 5, 4...");
16+
console.log("Ignition...");
17+
consoul.log("3, 2, 1...");
18+
console.log("Liftoff!");
19+
} else {
20+
console.log("Launch scrubbed.");
21+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
const input = require('readline-sync');
2+
3+
let animals = [{name: 'cat'}, {name: 'dog'}];
4+
let index = Number(input.question("Enter index of animal:"));
5+
6+
try {
7+
console.log('animal at index:', animals[index].name);
8+
} catch(TypeError) {
9+
console.log("We caught a TypeError, but our program continues to run!");
10+
} finally {
11+
console.log("You tried to access an animal at index:", index);
12+
}
13+
14+
console.log("the code goes on...");
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "control-flow-type-error-finally",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [],
10+
"author": "",
11+
"license": "ISC",
12+
"dependencies": {
13+
"readline-sync": "^1.4.10"
14+
}
15+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
throw Error('You cannot divide by zero!');
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "control-flow-type-error",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [],
10+
"author": "",
11+
"license": "ISC",
12+
"dependencies": {
13+
"readline-sync": "^1.4.10"
14+
}
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const input = require('readline-sync');
2+
3+
let animals = [{name: 'cat'}, {name: 'dog'}];
4+
let index = Number(input.question("Enter index of animal:"));
5+
6+
try {
7+
console.log('animal at index:', animals[index].name);
8+
} catch(TypeError) {
9+
console.log("We caught a TypeError, but our program continues to run!");
10+
console.log("You tried to access an animal at index:", index);
11+
}
12+
13+
console.log("the code goes on...");

exceptions/exercises/divide.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// Write a function called 'divide' that takes two parameters: a numerator and a denominator.
2+
3+
// Your function should return the result of numerator / denominator.
4+
5+
// However, if the denominator is zero you should throw the error, "Attempted to divide by zero."
6+
7+
// Code your divide function here:
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
function gradeLabs(labs) {
2+
for (let i=0; i < labs.length; i++) {
3+
let lab = labs[i];
4+
let result = lab.runLab(3);
5+
console.log(`${lab.student} code worked: ${result === 27}`);
6+
}
7+
}
8+
9+
let studentLabs = [
10+
{
11+
student: 'Carly',
12+
runLab: function (num) {
13+
return Math.pow(num, num);
14+
}
15+
},
16+
{
17+
student: 'Erica',
18+
runLab: function (num) {
19+
return num * num;
20+
}
21+
}
22+
];
23+
24+
gradeLabs(studentLabs);
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
function averageForStudent(nameIndex,scores){
2+
let sum = 0;
3+
for (let i=0; i<scores.length; i++){
4+
sum += scores[nameIndex][i];
5+
}
6+
let average = sum/scores[nameIndex].length;
7+
return average;
8+
}
9+
10+
function averageForTest(testIndex,scores){
11+
let sum = 0;
12+
for (let i=0; i<scores.length; i++){
13+
sum += scores[i][testIndex];
14+
}
15+
let average = sum/scores[0].length;
16+
return average;
17+
}
18+
19+
//TODO: Export all functions within an object.

modules/exercises/display.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//TODO: Export ONLY the printAll function.
2+
3+
function printAll(names, tests, scores){
4+
let header = 'Name';
5+
let row = '';
6+
7+
for (let i = 0; i<tests.length; i++){
8+
header += '\t'+tests[i];
9+
}
10+
console.log(header);
11+
12+
for (let name = 0; name<names.length; name++){
13+
row = names[name];
14+
for (let score = 0; score<scores[name].length;score++){
15+
row += '\t'+scores[name][score];
16+
}
17+
console.log(row);
18+
}
19+
return;
20+
}
21+
22+
function printStudentScores(index,students,tests,scores){
23+
console.log(`Test results for ${students[index]}:`);
24+
for (let i = 0; i<tests.length; i++){
25+
console.log(`${tests[i]} = ${scores[index][i]}%.`);
26+
}
27+
return;
28+
}
29+
30+
function printTestScores(index,test,students,scores){
31+
console.log(`Class results for ${test} test:`);
32+
for (let i = 0; i<students.length; i++){
33+
console.log(`${students[i]} = ${scores[i][index]}%.`);
34+
}
35+
return;
36+
}

modules/exercises/index.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//Import modules:
2+
const input = //Import readline-sync.
3+
const averages = //Import functions from averages.js.
4+
const printAll = //Import function from display.js.
5+
const randomSelect = //Import function from randomSelect.js.
6+
7+
//Candidate data:
8+
let astronauts = ['Fox','Turtle','Cat','Hippo','Dog'];
9+
10+
const testTitles = ['Math','Fitness','Coding','Nav','Communication'];
11+
12+
let scores = [[95, 86, 83, 81, 76],[79, 71, 79, 87, 72],[94, 87, 87, 83, 82],[99, 77, 91, 79, 80],[96, 95, 99, 82, 70]];
13+
14+
//User interface:
15+
let prompts = ['display all scores', 'average the scores for each test', 'average the scores for each astronaut','select the next spacewalker'];
16+
17+
for (let i = 0; i<prompts.length; i++){
18+
let response = input.question(`Would you like to ${prompts[i]}? Y/N: `);
19+
if (response.toLowerCase()==='y'){
20+
if (i===0){
21+
//Call 'printAll' here and pass in all necessary arguments.
22+
} else if (i===1){
23+
for (let j = 0; j<testTitles.length; j++){
24+
let avg = //Call 'averageForTest' here. Pass in j and scores as arguments.
25+
console.log(`${testTitles[j]} test average = ${avg}%.`);
26+
}
27+
} else if (i===2){
28+
for (let j = 0; j<astronauts.length; j++){
29+
let avg = //Call 'averageForStudent' here. Pass in j and scores as arguments.
30+
console.log(`${astronauts[j]}'s test average = ${avg}%.`);
31+
}
32+
} else {
33+
let walker = //Call 'randomSelect' to pick a spacewalker from the astronauts array.
34+
console.log(`${walker} is the next spacewalker.`);
35+
}
36+
} else {
37+
console.log("Option skipped.");
38+
}
39+
}

modules/exercises/package.json

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
"name": "Dependencies for Chapter 13 Exercises: Modules",
3+
"version": "1.0.0",
4+
"description": "This package.json file includes all dependencies needed to run code within files contained in this directory",
5+
"main": "index.js",
6+
"dependencies": {
7+
"readline-sync": "^1.4.10"
8+
},
9+
"scripts": {
10+
"start": "node index.js"
11+
},
12+
"author": "John Woolbright",
13+
"license": "ISC"
14+
}

modules/exercises/randomSelect.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function randomFromArray(arr){
2+
//Your code here to select a random element from the array passed to the function.
3+
}
4+
5+
//TODO: Export the randomFromArray function.

modules/exporting-modules/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// Import the modules exported from practiceExports.js below:
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function isPalindrome(str){
2+
return str === str.split('').reverse().join('');
3+
}
4+
5+
function evenOrOdd(num){
6+
if (num%2===0){
7+
return "Even";
8+
} else {
9+
return "Odd";
10+
}
11+
}
12+
13+
function randomArrayElement(arr){
14+
let index = Math.floor(Math.random()*arr.length);
15+
return arr[index];
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "Chapter 11: More on Functions Chapter Examples Directory",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [],
10+
"author": "",
11+
"license": "ISC",
12+
"dependencies": {
13+
"readline-sync": "^1.4.10"
14+
}
15+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
function reverse(str) {
2+
let lettersArray = str.split('');
3+
let reversedLettersArray = lettersArray.reverse();
4+
return reversedLettersArray.join('');
5+
}
6+
7+
console.log(reverse("LaunchCode"));
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const input = require('readline-sync');
2+
let userInput = input.question("Please enter a number:");
3+
let logger = function(errorMsg) {
4+
console.log("ERROR: " + errorMsg);
5+
};
6+
if (userInput < 0) {
7+
// ______("Invalid input");
8+
}
9+
10+
// Fill in the blank in line 7 (then uncomment it) so that it logs an error message if userInput is negative.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
function decreasingSum(integer) {
2+
if (integer === 1){
3+
return integer;
4+
} else {
5+
//call decreasingSum function again
6+
}
7+
}
8+
9+
console.log(decreasingSum(5));
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
function combineEntries(arrayName) {
2+
if (arrayName.length <= 1){
3+
return arrayName[0];
4+
} else {
5+
//console.log(arrayName[0], arrayName.slice(1));
6+
return arrayName[0] + combineEntries(arrayName.slice(1));
7+
}
8+
}
9+
10+
//First, run the code to see the result.
11+
12+
//Next, uncomment the console.log statement above to see how each call to combineEntries looks at a different section of the original array.
13+
14+
let arr = ['L', 'C', '1', '0', '1'];
15+
16+
console.log(combineEntries(arr));
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "Chapter 11: More on Functions Chapter Examples Directory",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [],
10+
"author": "",
11+
"license": "ISC",
12+
"dependencies": {
13+
"readline-sync": "^1.4.10"
14+
}
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function printMessage() {
2+
console.log("The future is now!");
3+
}
4+
5+
setTimeout(printMessage, 5000);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
let nums = [3.14, 42, 4811];
2+
3+
// TODO: Write a mapping function
4+
// and pass it to .map()
5+
let halved = nums.map();
6+
7+
console.log(halved);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
let names = ["Chris", "Jim", "Sally", "Blake", "Paul", "John", "Courtney", "Carly"];
2+
3+
// TODO: Write a mapping function
4+
// and pass it to .map()
5+
let firstInitials = names.map();
6+
7+
console.log(firstInitials);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"name": "Chapter 11: More on Functions Chapter Examples Directory",
3+
"version": "1.0.0",
4+
"description": "",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [],
10+
"author": "",
11+
"license": "ISC",
12+
"dependencies": {
13+
"readline-sync": "^1.4.10"
14+
}
15+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
function callMe(func) {
2+
func();
3+
}
4+
5+
callMe("Al");
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const input = require('readline-sync');
2+
3+
function getValidInput(prompt, isValid) {
4+
5+
let userInput = input.question(prompt);
6+
7+
while (!isValid(userInput)) {
8+
console.log("Invalid input. Try again.");
9+
userInput = input.question(prompt);
10+
}
11+
12+
return userInput;
13+
}
14+
15+
// TODO 1: write a validator
16+
// that ensures input starts with "a"
17+
18+
// TODO 2: write a validator
19+
// that ensures input is a vowel
20+
21+
// Be sure to test your code!

0 commit comments

Comments
 (0)