- Finished all level 1 and 2 exercises for day 8 - Finished averageRating function for Level 3 Exercises section. - Finished Exercises Level 3, Exercise 1 - Need to finish Exercises Level 3, Exercises 2 ,3, and 4pull/882/head
parent
1f88dfe0e7
commit
6c521165ad
@ -1,2 +0,0 @@
|
||||
console.log(countries)
|
||||
alert('Open the console and check if the countries has been loaded')
|
||||
@ -0,0 +1,377 @@
|
||||
//Exercises Level 1
|
||||
//Exercise 1 -- Create an empty object called dog
|
||||
let dog = {};
|
||||
|
||||
//Exercise 2 -- Print the the dog object on the console
|
||||
console.log(dog);
|
||||
|
||||
//Exercise 3 -- Add name, legs, color, age and bark properties for the dog object. The bark property is a method which return woof woof
|
||||
dog = {
|
||||
name: "Sam",
|
||||
age: 2,
|
||||
legs: 4,
|
||||
color: 'Golden',
|
||||
|
||||
bark: function () {
|
||||
return "WOOF WOOF";
|
||||
}
|
||||
};
|
||||
console.log(dog);
|
||||
|
||||
//Exercise 4 -- Get name, legs, color, age and bark value from the dog object
|
||||
console.log(`Dogs name: ${dog.name}, age: ${dog.age}, legs: ${dog.legs}, color: ${dog.color}, bark value: ${dog.bark()}`);
|
||||
|
||||
//Exercise 5 -- Set new properties the dog object: breed, getDogInfo
|
||||
dog.breed = "Golden Retriever";
|
||||
dog.getDogInfo= function()
|
||||
{
|
||||
console.log(`My dog's name is ${dog.name} he is a ${dog.color}, ${dog.breed}. He has ${dog.legs} legs and his age is ${dog.age} years old`);
|
||||
}
|
||||
|
||||
dog.getDogInfo();
|
||||
|
||||
// Exercises Level 2
|
||||
const users2 = {
|
||||
Alex: {
|
||||
email: 'alex@alex.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript'],
|
||||
age: 20,
|
||||
isLoggedIn: false,
|
||||
points: 30
|
||||
},
|
||||
Asab: {
|
||||
email: 'asab@asab.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'Redux', 'MongoDB', 'Express', 'React', 'Node'],
|
||||
age: 25,
|
||||
isLoggedIn: false,
|
||||
points: 50
|
||||
},
|
||||
Brook: {
|
||||
email: 'daniel@daniel.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'],
|
||||
age: 30,
|
||||
isLoggedIn: true,
|
||||
points: 50
|
||||
},
|
||||
Daniel: {
|
||||
email: 'daniel@alex.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'Python'],
|
||||
age: 20,
|
||||
isLoggedIn: false,
|
||||
points: 40
|
||||
},
|
||||
John: {
|
||||
email: 'john@john.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'React', 'Redux', 'Node.js'],
|
||||
age: 20,
|
||||
isLoggedIn: true,
|
||||
points: 50
|
||||
},
|
||||
Thomas: {
|
||||
email: 'thomas@thomas.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'React'],
|
||||
age: 20,
|
||||
isLoggedIn: false,
|
||||
points: 40
|
||||
},
|
||||
Paul: {
|
||||
email: 'paul@paul.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript', 'MongoDB', 'Express', 'React', 'Node'],
|
||||
age: 20,
|
||||
isLoggedIn: false,
|
||||
points: 40
|
||||
}
|
||||
}
|
||||
|
||||
//Exercise 1 -- Find the person who has the most skills in the users object.
|
||||
function getMostSkills()
|
||||
{
|
||||
let max = Number.MIN_SAFE_INTEGER;
|
||||
let res = undefined;
|
||||
for (const key in users2)
|
||||
{
|
||||
const user = users2[key];
|
||||
if (user.skills.length > max)
|
||||
{
|
||||
max = user.skills.length;
|
||||
res = user;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
console.log(getMostSkills());
|
||||
|
||||
//Exercise 2 -- Count logged in users, count users having greater than or equal to 50 points from the following object.
|
||||
//Uses same users object as Exercise Level 2, Exercise 1
|
||||
function countLoggedInUsers()
|
||||
{
|
||||
let loggedInUserCount = 0;
|
||||
let greaterThen50Points = 0;
|
||||
for(const key in users2)
|
||||
{
|
||||
const user = users2[key];
|
||||
|
||||
if(user.isLoggedIn)
|
||||
loggedInUserCount=loggedInUserCount+1;
|
||||
else if(user.points>=50)
|
||||
greaterThen50Points=greaterThen50Points+1;
|
||||
}
|
||||
console.log(`Number of logged in users: ${loggedInUserCount}`);
|
||||
console.log(`Number of users having over greater then or equal to 50 points: ${greaterThen50Points}`);
|
||||
}
|
||||
countLoggedInUsers();
|
||||
|
||||
//Exercise 3 -- Find people who are MERN stack developer from the users object
|
||||
function MERNstack() {
|
||||
const requiredSkills = ['mongodb', 'express', 'react', 'node'];
|
||||
|
||||
for (const username in users2) {
|
||||
const user = users2[username];
|
||||
let hasAllRequiredSkills = true;
|
||||
|
||||
for (let i = 0; i < requiredSkills.length; i++) {
|
||||
const requiredSkill = requiredSkills[i].toLowerCase(); // Convert to lowercase
|
||||
let hasRequiredSkill = false;
|
||||
|
||||
for (let j = 0; j < user.skills.length; j++) {
|
||||
const userSkill = user.skills[j].toLowerCase(); // Convert user's skill to lowercase
|
||||
|
||||
if (userSkill === requiredSkill) {
|
||||
hasRequiredSkill = true;
|
||||
break; // Skill found, no need to continue searching
|
||||
}
|
||||
}
|
||||
|
||||
if (!hasRequiredSkill) {
|
||||
hasAllRequiredSkills = false;
|
||||
break; // Exit the loop as soon as one required skill is missing
|
||||
}
|
||||
}
|
||||
|
||||
if (hasAllRequiredSkills) {
|
||||
console.log(`${username} is a MERN developer`);
|
||||
}
|
||||
}
|
||||
}
|
||||
MERNstack();
|
||||
|
||||
//Exercise 4 -- Set your name in the users object without modifying the original users object
|
||||
const newUser = {
|
||||
Brendan: {
|
||||
email: 'deliveritthere@gmail.com',
|
||||
skills: ['HTML', 'CSS', 'JavaScript','Mongodb','Express','React','Node'],
|
||||
age: 23,
|
||||
isLoggedIn: true,
|
||||
points: 15
|
||||
}
|
||||
};
|
||||
|
||||
const updatedUsers = { ...users2, ...newUser };
|
||||
|
||||
//Exercise 5 -- Get all keys or properties of users object
|
||||
const keys = Object.keys(users2);
|
||||
console.log(keys);
|
||||
|
||||
//Exercise 6 -- Get all the values of users object
|
||||
let valuesArray = Object.values(users2);
|
||||
|
||||
for (let value of valuesArray)
|
||||
{
|
||||
console.log(value);
|
||||
}
|
||||
|
||||
//Exercise 7 -- Use the countries object to print a country name, capital, populations and languages.
|
||||
console.log(`name: ${countries[0].name}, capital: ${countries[0].capital}, population: ${countries[0].population}, languages: ${countries[0].languages}`);
|
||||
|
||||
// Exercises: Level 3
|
||||
//Exercise 1 -- Create an object literal called personAccount. It has firstName, lastName, incomes, expenses properties and it has totalIncome, totalExpense, accountInfo, addIncome, addExpense and accountBalance methods. Incomes is a set of incomes and its description and expenses is a set of incomes and its description.
|
||||
const personAccount = {
|
||||
firstName: 'Brendan',
|
||||
lastName: 'Klein',
|
||||
incomes: { salary: 100000, sidehustle: 120 },
|
||||
expenses: { dte: 200, consumers: 50, water: 20, trash: 0 },
|
||||
|
||||
addIncome:function(description, amount)
|
||||
{
|
||||
personAccount.incomes[description]=amount;
|
||||
},
|
||||
|
||||
addExpenses:function(description, amount)
|
||||
{
|
||||
personAccount.expenses[description]=amount;
|
||||
},
|
||||
|
||||
totalIncome:function()
|
||||
{
|
||||
let totalIncome=0;
|
||||
for(income in personAccount.incomes)
|
||||
{
|
||||
totalIncome = totalIncome + personAccount.incomes[income];
|
||||
}
|
||||
return totalIncome;
|
||||
},
|
||||
|
||||
totalExpenses:function()
|
||||
{
|
||||
let totalExpenses = 0;
|
||||
for(expense in personAccount.expenses)
|
||||
{
|
||||
totalExpenses = totalExpenses + personAccount.expenses[expense];
|
||||
}
|
||||
return totalExpenses;
|
||||
},
|
||||
|
||||
accountBalance:function()
|
||||
{
|
||||
let accountBalance = personAccount.totalIncome() - personAccount.totalExpenses();
|
||||
|
||||
return accountBalance;
|
||||
},
|
||||
|
||||
accountInfo:function()
|
||||
{
|
||||
console.log(`First name: ${personAccount.firstName}`);
|
||||
console.log(`Last name: ${personAccount.lastName}`);
|
||||
console.log(`Total Income: ${personAccount.totalIncome()}`);
|
||||
console.log(`Total Expenses ${personAccount.totalExpenses()}`);
|
||||
console.log(`Account Balance ${personAccount.accountBalance()}`);
|
||||
}
|
||||
}
|
||||
personAccount.accountInfo();
|
||||
|
||||
//Exercise 2 -- ***** Questions:2, 3 and 4 are based on the following two arrays:users and products ()
|
||||
const users = [
|
||||
{
|
||||
_id: 'ab12ex',
|
||||
username: 'Alex',
|
||||
email: 'alex@alex.com',
|
||||
password: '123123',
|
||||
createdAt:'08/01/2020 9:00 AM',
|
||||
isLoggedIn: false
|
||||
},
|
||||
{
|
||||
_id: 'fg12cy',
|
||||
username: 'Asab',
|
||||
email: 'asab@asab.com',
|
||||
password: '123456',
|
||||
createdAt:'08/01/2020 9:30 AM',
|
||||
isLoggedIn: true
|
||||
},
|
||||
{
|
||||
_id: 'zwf8md',
|
||||
username: 'Brook',
|
||||
email: 'brook@brook.com',
|
||||
password: '123111',
|
||||
createdAt:'08/01/2020 9:45 AM',
|
||||
isLoggedIn: true
|
||||
},
|
||||
{
|
||||
_id: 'eefamr',
|
||||
username: 'Martha',
|
||||
email: 'martha@martha.com',
|
||||
password: '123222',
|
||||
createdAt:'08/01/2020 9:50 AM',
|
||||
isLoggedIn: false
|
||||
},
|
||||
{
|
||||
_id: 'ghderc',
|
||||
username: 'Thomas',
|
||||
email: 'thomas@thomas.com',
|
||||
password: '123333',
|
||||
createdAt:'08/01/2020 10:00 AM',
|
||||
isLoggedIn: false
|
||||
}
|
||||
];
|
||||
|
||||
const products = [
|
||||
{
|
||||
_id: 'eedfcf',
|
||||
name: 'mobile phone',
|
||||
description: 'Huawei Honor',
|
||||
price: 200,
|
||||
ratings: [
|
||||
{ userId: 'fg12cy', rate: 5 },
|
||||
{ userId: 'zwf8md', rate: 4.5 }
|
||||
],
|
||||
likes: []
|
||||
},
|
||||
{
|
||||
_id: 'aegfal',
|
||||
name: 'Laptop',
|
||||
description: 'MacPro: System Darwin',
|
||||
price: 2500,
|
||||
ratings: [],
|
||||
likes: ['fg12cy']
|
||||
},
|
||||
{
|
||||
_id: 'hedfcg',
|
||||
name: 'TV',
|
||||
description: 'Smart TV:Procaster',
|
||||
price: 400,
|
||||
ratings: [{ userId: 'fg12cy', rate: 5 }],
|
||||
likes: ['fg12cy']
|
||||
}
|
||||
]
|
||||
|
||||
// Imagine you are getting the above users collection from a MongoDB database.
|
||||
//a. Create a function called signUp which allows user to add to the collection. If user exists, inform the user that he has already an account.
|
||||
|
||||
// function signUp(username, email, password)
|
||||
// {
|
||||
// if(Object.values(users).includes(username) && Object.values(users).includes(email))
|
||||
// return "The username provided already has an account"
|
||||
// else
|
||||
// {
|
||||
// Object.assign({},users,{'_id': 123456, 'username': username});
|
||||
// }
|
||||
|
||||
// console.log(users);
|
||||
// }
|
||||
|
||||
|
||||
// signUp('bklein', 'deliveritthere@gmail.com', '12385');
|
||||
|
||||
// b. Create a function called signIn which allows user to sign in to the application
|
||||
users.signIn = function()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//Exercise 3 -- The products array has three elements and each of them has six properties.
|
||||
//a. Create a function called rateProduct which rates the product
|
||||
products.rateProduct = function(name, rating)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//b. Create a function called averageRating which calculate the average rating of a product
|
||||
products.averageRating = function()
|
||||
{
|
||||
console.log(`------------------------------------------------------------------------------------`);
|
||||
for(item in products)
|
||||
{
|
||||
let numRatings = 0;
|
||||
let addRatings = 0;
|
||||
let itemName = products[item].name;
|
||||
|
||||
for(rate in products[item].ratings)
|
||||
{
|
||||
addRatings = addRatings + products[item].ratings[rate].rate;
|
||||
numRatings = numRatings+1;
|
||||
}
|
||||
addRatings = addRatings / numRatings;
|
||||
|
||||
if(itemName == "")
|
||||
continue;
|
||||
|
||||
if(isNaN(addRatings))
|
||||
addRatings="No ratings for that product!";
|
||||
|
||||
console.log(`${itemName} has an average rating of: ${addRatings}`);
|
||||
}
|
||||
console.log(`------------------------------------------------------------------------------------`);
|
||||
}
|
||||
|
||||
products.averageRating();
|
||||
|
||||
//Exercise 4 -- Create a function called likeProduct. This function will helps to like to the product if it is not liked and remove like if it was liked.
|
||||
Loading…
Reference in new issue