Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,27 @@ Edit this document to include your answers after each question. Make sure to lea

1. Describe the biggest difference between `.forEach` & `.map`.

***map automatically makes a new modified array according to the function passed. For each accesses each element in the array.***

2. What is the difference between a function and a method?

***a method is a function that belongs to a specific javascript object or class***

3. What is closure?

***Determines the scope of where a method/function will execute and look for variables.***

4. Describe the four rules of the 'this' keyword.

***Window: It's when you invoque a function from the global scope, not inside any object.***
***Implicit: It's when you invoque a function from inside an object's scope (you call the function or method with the object and a dot preceding).***
***New: it's when you invoque a constructor function. 'This' is refered to the object being created.***
***Explicit: it's used when there is inheritance, so you can override what object 'this' refers to.***

5. Why do we need super() in an extended class?

***So that the child have access to the properties of the parent.***

## Project Set up

Follow these steps to set up and work on your project:
Expand Down
57 changes: 54 additions & 3 deletions challenges/classes.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,58 @@
// 1. Copy and paste your prototype in here and refactor into class syntax.

class CuboidMakerX{
constructor(props){
this.length = props.length,
this.width = props.width,
this.height = props.height
}
volume() {
return this.length*this.width*this.height;
}
surfaceArea() {
return 2*(this.length*this.width + this.length*this.height + this.width*this.height);
}
}

class CubeMaker extends CuboidMakerX{
constructor(props){
super(props)
}
cubeVolume() {
if(this.length === this.width && this.length === this.height) {
return Math.pow(this.length, 3);
} else {
return `This is not a cube`;
}
}
cubeVolume() {
if(this.length === this.width && this.length === this.height) {
return `Cube volume is ${Math.pow(this.length, 3)}`;
} else {
return `Sorry, this is not a cube`;
}
}
cubeSurfaceArea() {
if(this.length === this.width && this.length === this.height) {
return `Cube surface area is ${6*Math.pow(this.length, 2)}`;
} else {
return `Sorry, this is not a cube`;
}
}
}

let cuboidX = new CubeMaker({
length: 4,
width: 5,
height: 5
})

// Test your volume and surfaceArea methods by uncommenting the logs below:
// console.log(cuboid.volume()); // 100
// console.log(cuboid.surfaceArea()); // 130
console.log(cuboidX.volume()); // 100
console.log(cuboidX.surfaceArea()); // 130
console.log(cuboidX.cubeVolume()); // 130
console.log(cuboidX.cubeSurfaceArea()); // 130

// Stretch Task: Extend the base class CuboidMaker with a sub class called CubeMaker. Find out the formulas for volume and surface area for cubes and create those methods using the dimension properties from CuboidMaker. Test your work by logging out your volume and surface area.

// Stretch Task: Extend the base class CuboidMaker with a sub class called CubeMaker. Find out the formulas for volume and surface area for cubes and create those methods using the dimension properties from CuboidMaker. Test your work by logging out your volume and surface area.
// its above
22 changes: 18 additions & 4 deletions challenges/functions.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,40 @@
* The consume function should return the invocation of cb, passing a and b into cb as arguments
*/

let consume = function(a,b,cb){
return cb(a,b);
};

/* Step 2: Create several functions to callback with consume();
* Create a function named add that returns the sum of two numbers
* Create a function named multiply that returns the product of two numbers
* Create a function named greeting that accepts a first and last name and returns "Hello first-name last-name, nice to meet you!"
*/

let add = function(num1,num2) {
return num1 + num2;
}

let multiply = function(num1,num2) {
return num1 * num2;
}

let greeting = function(firstname,lastname) {
return `Hello ${firstname} ${lastname}, nice to meet you!`;
}

/* Step 3: Check your work by un-commenting the following calls to consume(): */
// console.log(consume(2, 2, add)); // 4
// console.log(consume(10, 16, multiply)); // 160
// console.log(consume("Mary", "Poppins", greeting)); // Hello Mary Poppins, nice to meet you!
console.log(consume(2, 2, add)); // 4
console.log(consume(10, 16, multiply)); // 160
console.log(consume("Mary", "Poppins", greeting)); // Hello Mary Poppins, nice to meet you!


// ==== Closures ====

// Explain in your own words why nestedfunction can access the variable internal.

// Explanation:

// Because they are in the same level, both the variable internal and the function nested are properties of the same function:myFunction

const external = "I'm outside the function";

Expand Down
107 changes: 91 additions & 16 deletions challenges/objects-arrays.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,54 @@

// tyrannosaurus, carnivorous, 7000kg, 12m, Late Cretaceous

let dino1 = {
name: 'tyrannosaurus',
diet: 'carnivorous',
weigh: '7000kg',
length: '12m',
period: 'Late Cretaceous',
roar: function() {
return `roooooaaaaaaar!!!`;
}
}

// stegosaurus, herbivorous, 2000kg, 9m, Late Jurassic

let dino2 = {
name: 'stegosaurus',
diet: 'herbivorous',
weigh: '2000kg',
length: '9m',
period: 'Late Jurassic'
}

// velociraptor, carnivorous, 15kg, 1.8m, Late Cretaceous

let dino3 = {
name: 'velociraptor',
diet: 'carnivorous',
weigh: '15kg',
length: '1.8m',
period: 'Late Cretaceous'
}

// Using your dinosaur objects, log answers to these questions:

// How much did tyrannosaurus weigh?
console.log();
console.log(dino1.weigh);

// What was the diet of a velociraptor?
console.log();
console.log(dino3.diet);

// How long was a stegosaurus?
console.log();
console.log(dino2.length);

// What time period did tyrannosaurus live in?
console.log();
console.log(dino1.period);


// Create a new roar method for the tyrannosaurus. When called, return "RAWERSRARARWERSARARARRRR!" Log the result.
console.log();
console.log(dino1.roar());


// ==== Arrays ====
Expand All @@ -48,24 +75,39 @@ const graduates = [
{ id: 10, first_name: "Hube", university: "Universitat Rovira I Virgili Tarragona", email: "[email protected]" },
];

/* Request 1: Create a new array called universities that contains all the universities in the graduates array. This will be an array of strings.
// Request 1: Create a new array called universities that contains all the universities in the graduates array. This will be an array of strings.

Once you have the new array created, sort the universities alphabetically and log the result. */
const universities = [];
console.log(universities);
// Once you have the new array created, sort the universities alphabetically and log the result.

// const universities = [];
// graduates.forEach(function(graduate){
// universities.push(graduate.university);
// universities.sort();
// });
// console.log(universities);

/* Request 2: Create a new array called contactInfo that contains both first name and email of each student. This will be an array of strings.

The resulting contact information strings should have a space between the first name and the email, like this:
"Josh [email protected]"

Log the result of your new array. */
const contactInfo = [];
console.log(contactInfo);
// const contactInfo = [];
// graduates.forEach(function(graduate){
// contactInfo.push(`${graduate.first_name} ${graduate.email}`);
// contactInfo.sort();
// });

// console.log(contactInfo);

/* Request 3: Find out how many universities have the string "Uni" included in their name. Create a new array called unisWithUni that contains them all. This will be an array of objects. Log the result. */
const unisWithUni = [];
console.log(unisWithUni);

// let unisWithUni = [];
// unisWithUni = graduates.filter(function(graduate){
// return graduate.university.includes('Uni');
// });

// console.log(unisWithUni);


// ==== ADVANCED Array Methods ====
Expand All @@ -91,6 +133,10 @@ The zoos want to display both the scientific name and the animal name in front o

*/
const displayNames = [];
zooAnimals.forEach(function(animal){
displayNames.push(`Name: ${animal.animal_name}, Scientific: ${animal.scientific_name}`);
})

console.log(displayNames);

/* Request 2: .map()
Expand All @@ -99,23 +145,31 @@ The zoos need a list of all their animal's names (animal_name only) converted to

*/

const lowCaseAnimalNames = [];
const lowCaseAnimalNames = zooAnimals.map(function (animal) {
return animal.animal_name.toLowerCase();
});

console.log(lowCaseAnimalNames);

/* Request 3: .filter()

The zoos are concerned about animals with a lower population count. Using filter, create a new array of objects called lowPopulationAnimals which contains only the animals with a population less than 5.

*/
const lowPopulationAnimals = [];
const lowPopulationAnimals = zooAnimals.filter(function(animal){
return animal.population < 5;
});
console.log(lowPopulationAnimals);

/* Request 4: .reduce()

The zoos need to know their total animal population across the United States. Find the total population from all the zoos using the .reduce() method. Remember the reduce method takes two arguments: a callback (which itself takes two args), and an initial value for the count.

*/
const populationTotal = 0;
let populationTotal = 0;
populationTotal = zooAnimals.reduce(function(accumulator, animal){
return accumulator + animal.population;
}, 0);
console.log(populationTotal);


Expand All @@ -125,3 +179,24 @@ Stretch: If you haven't already, convert your array method callbacks into arrow

*/

const universities = [];
graduates.forEach((graduate) => {
universities.push(graduate.university);
universities.sort();
});
console.log(universities);

const contactInfo = [];
graduates.forEach((graduate)=>{
contactInfo.push(`${graduate.first_name} ${graduate.email}`);
contactInfo.sort();
});

console.log(contactInfo);

let unisWithUni = [];
unisWithUni = graduates.filter((graduate)=>{
return graduate.university.includes('Uni');
});

console.log(unisWithUni);
23 changes: 21 additions & 2 deletions challenges/prototypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,47 @@
Create a constructor function named CuboidMaker that accepts properties for length, width, and height
*/

function CuboidMaker(props){
this.length = props.length,
this.width = props.width,
this.height = props.height
};

/* == Step 2: Volume Method ==
Create a method using CuboidMaker's prototype that returns the volume of a given cuboid's length, width, and height

Formula for cuboid volume: length * width * height
*/

CuboidMaker.prototype.volume = function() {
return this.length*this.width*this.height;
}


/* == Step 3: Surface Area Method ==
Create another method using CuboidMaker's prototype that returns the surface area of a given cuboid's length, width, and height.

Formula for cuboid surface area of a cube: 2 * (length * width + length * height + width * height)
*/

CuboidMaker.prototype.surfaceArea = function() {
return 2*(this.length*this.width + this.length*this.height + this.width*this.height);
}

/* == Step 4: Create a new object that uses CuboidMaker ==
Create a cuboid object that uses the new keyword to use our CuboidMaker constructor
Add properties and values of length: 4, width: 5, and height: 5 to cuboid.
*/

let cuboid = new CuboidMaker({
length: 4,
width: 5,
height: 5
})


// Test your volume and surfaceArea methods by uncommenting the logs below:
// console.log(cuboid.volume()); // 100
// console.log(cuboid.surfaceArea()); // 130
console.log(cuboid.volume()); // 100
console.log(cuboid.surfaceArea()); // 130