diff --git a/01_Day_JavaScript_Refresher/01_javascript_refresher.md b/01_Day_JavaScript_Refresher/01_javascript_refresher.md
index 7d03fb4..0dca8db 100644
--- a/01_Day_JavaScript_Refresher/01_javascript_refresher.md
+++ b/01_Day_JavaScript_Refresher/01_javascript_refresher.md
@@ -2124,7 +2124,7 @@ const products = [
{
_id: 'hedfcg',
name: 'TV',
- description: 'Smart TV:Procaster',
+ description: 'Smart TV: Procaster',
price: 400,
ratings: [{ userId: 'fg12cy', rate: 5 }],
likes: ['fg12cy'],
diff --git a/solutions/day-01/index.html b/solutions/day-01/index.html
new file mode 100644
index 0000000..4b421fa
--- /dev/null
+++ b/solutions/day-01/index.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+ 30DaysOfJavaScript:External script
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/solutions/day-01/intro.js b/solutions/day-01/intro.js
new file mode 100644
index 0000000..69dcd8b
--- /dev/null
+++ b/solutions/day-01/intro.js
@@ -0,0 +1,141 @@
+// file is external source to index.html
+// last thing in body
+console.log('hello challenge');
+// variables declared with let or var can be changed
+let firstName = 'LSMarch';
+firstName = 'greatest';
+var lastName = 'Hacker';
+lastName = 'ever';
+console.log(`${firstName} ${lastName}`);
+// variables declared with const cannot be changed
+const PI = 3.14159;
+// this won't diplsay and it errors out
+//PI = 3.14;
+console.log(PI);
+
+const numbers = [0, 3, 6, 9, 12]; // array of numbers
+const fruits = ['banana', 'apple', 'peach', 'orange']; // array of strings
+// print array and it's length
+console.log('Numbers:', numbers);
+console.log('Number of numbers:', numbers.length);
+console.log('Fruits:', fruits);
+console.log('Number of fruits:', fruits.length);
+// an array can have values of different types
+const array = [
+ 'LSMarch',
+ 3,
+ false,
+ { make: 'Chevy', model: 'Prism' },
+ { skills: ['HTML', 'JavaScript', 'CSS', 'React', 'Java', 'Angular'] }
+];
+console.log(array);
+
+let js = 'JavaScript'
+// splits js into an array at each character
+const charactersInJavaScript = js.split('');
+console.log('Split a string:', charactersInJavaScript);
+let companiesString = 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon';
+// splits string at comma and returns array
+const companies = companiesString.split(',');
+console.log('Split a string at ",":', companies);
+// can access each element in an array by their index.
+// array index starts at 0
+let firstFruit = fruits[0];
+console.log("Call value at index 0 in fruits array", firstFruit);
+let secondFruit = fruits[1];
+console.log("Call value at index 0 in fruits array", secondFruit);
+// last index can be be accessed as...
+let lastIndex = fruits.length - 1;
+lastFruit = fruits[lastIndex];
+console.log("Call value at last index of fruits array", lastFruit);
+// arrays are mutable and we can modify it
+numbers[0] = 99;
+numbers[1] = 120;
+console.log("Modified numbers array:", numbers);
+// methods to manipulate an array
+const arr = Array();
+// just an empty array
+console.log("array created using Array constructor", arr);
+const eightEmptyValues = Array(8);
+console.log("Array of 8 indexes with constructor:", eightEmptyValues);
+// creates an array iwth 8 element values with 'X'
+const eightXValues = Array(8).fill('X');
+console.log("Array of 8 indexes with value of 'X' with constructor:", eightXValues);
+// concatenating two arrays
+const firstList = [1, 2, 3];
+const secondList = [4, 5, 6];
+const thirdList = firstList.concat(secondList);
+console.log("Concacted firstList and secondList:", thirdList);
+// .length returns the length of the array
+// indexOf return index of an element
+console.log("Shows index of array element:", numbers.indexOf(12));
+// if element is not in array returns -1
+console.log("Shows index of array element:", numbers.indexOf(22));
+// checking to see if something is in an array
+let index = fruits.indexOf('apple');
+if (index != -1) {
+ console.log('This fruit is in the array');
+} else {
+ console.log('This fruit is not in the array');
+}
+// can also use ternary
+index != -1 ? console.log('This fruit is in the array') : console.log('This fruit is not in the array')
+let indexofAvocado = fruits.indexOf('avocado');
+indexofAvocado != -1 ? console.log('This fruit is in the array') : console.log('This fruit is not in the array');
+// lastIndexOf gives the index of the last item in the array
+const newNums = [1, 2, 3, 4, 5, 3, 1, 2];
+console.log('Last index of value in newNums:', newNums.lastIndexOf(2));
+console.log('Last index of value in newNums:', newNums.lastIndexOf(6));
+console.log('Last index of value in newNums:', newNums.lastIndexOf(1));
+// include checks if element is in array and returns boolean
+console.log('4 is in the number array:', numbers.includes(4));
+console.log('9 is in the numbers array:', numbers.includes(9));
+// Array.isArray checks to see if value is indeed an array
+console.log('Numbers is an array:', Array.isArray(numbers));
+const number = 100;
+console.log('Number is an array', Array.isArray(number));
+//toString converts array to string (no spaces)
+console.log("Numbers array as string", numbers.toString());
+// join is used to join elements to array. Argument passed will be joined
+// in the array and return as a string;
+const webTechs = ['HTML', 'JavaScript', 'CSS', 'React', 'Java', 'Angular'];
+console.log("Joins webTechs array with comma and space", webTechs.join(', '));
+// slice cuts out multiple items in a range. Takes 2 arguments,
+// starting and ending posiion, excludes ending position
+console.log("Slice():", numbers.slice());
+console.log("Slice(0)", numbers.slice());
+console.log("Slice(0, numbers.length)", numbers.slice(0, numbers.length));
+console.log("Slice(1, 4", numbers.slice(1, 4));
+// splice takes 3 arguments, starting position, number of items to be removed,
+// and number of items to be added
+const moreNumbers = [1, 2, 3, 4, 5, 6];
+moreNumbers.splice()
+console.log("Splice() removes all itmes:", moreNumbers.splice());
+//moreNumbers.splice(0, 1)
+console.log("Splice(0, 1) removes first item:", moreNumbers);
+moreNumbers.splice(3, 3, 7, 8, 9)
+console.log("removes 3 items and replaces 3 items", moreNumbers);
+// push() adds to the end of an existing array
+moreNumbers.push(10);
+console.log("Push:", moreNumbers);
+// pop() removes 1 item from the end of the array
+moreNumbers.pop();
+console.log("Pop:", moreNumbers);
+// shift() removes 1 from the beginning of the array
+moreNumbers.shift();
+console.log("Shift:", moreNumbers);
+// unshift() add to the beginning of the array
+moreNumbers.unshift(1);
+console.log("Unshift:", moreNumbers);
+// reverses the order of the array
+moreNumbers.reverse();
+console.log("Reverse:", moreNumbers);
+// sore() arranges array elements in ascending order.
+webTechs.sort();
+console.log("Sort:", webTechs);
+// Array of arrays
+const frontEnd = ["HTML", "CSS", "JavaScript", "Angular", "React", "Redux"];
+const backEnd = ["Node", "Express", "SQL", "MongoDB", "Java", "Spring Boot"];
+const fullStack = [frontEnd, backEnd];
+// returns an array with 2 arrays
+console.log("Array in array:", fullStack);
\ No newline at end of file
diff --git a/solutions/day-01/level_1.js b/solutions/day-01/level_1.js
new file mode 100644
index 0000000..f4231f9
--- /dev/null
+++ b/solutions/day-01/level_1.js
@@ -0,0 +1,69 @@
+const exercise1_1 = [];
+const exercise1_2 = [1, 2, 3, 4, 5, 6];
+
+console.log(exercise1_2.length);
+
+console.log(exercise1_2[0]);
+
+console.log(exercise1_2[3]);
+
+const lastIndex = exercise1_2.length - 1;
+console.log(exercise1_2[lastIndex]);
+
+const mixedDataTypes = [
+ 'LSMarch',
+ 5,
+ { firstName: 'greatest', lastName: 'ever' },
+ ['HTML', 'CSS', 'JavaScript'],
+ 45,
+ 'React'
+];
+
+const itCompanies = [
+ 'Facebook',
+ 'Google',
+ 'Microsoft',
+ 'Apple',
+ 'IBM',
+ 'Oracle',
+ 'Amazon'
+];
+
+console.log(itCompanies);
+console.log("IT Companies Length:", itCompanies.length);
+console.log("First company:", itCompanies[0]);
+console.log("Middle Company:", itCompanies[4]);
+console.log("Last Company:", itCompanies[itCompanies.length - 1]);
+
+for (let i = 0; i < itCompanies.length; i++) {
+ console.log(itCompanies[i])
+}
+
+for (let i = 0; i < itCompanies.length; i++) {
+ console.log(itCompanies[i].toUpperCase());
+}
+
+console.log(itCompanies.join(', ') + " are big IT companies");
+
+let checkCompany = itCompanies.indexOf('IBM');
+checkCompany = -1
+ ? console.log('IBM is in the array')
+ : console.log('IBM is NOT in the array');
+
+// for (let i = 0; i < itCompanies.length; i++) {
+// if (!itCompanies[i].includes('oo')) {
+// itCompanies.splice(3, i);
+// }
+// }
+//console.log(itCompanies);
+
+//console.log(itCompanies.sort());
+//console.log(itCompanies.reverse());
+
+console.log(itCompanies.slice(0, 3));
+console.log(itCompanies.slice(4, 7));
+console.log(itCompanies.slice(2, 5));
+//console.log(itCompanies.splice(0, 1));
+//console.log(itCompanies.splice(6, 1));
+//console.log(itCompanies.splice(3, 1));
+console.log(itCompanies.splice());
\ No newline at end of file
diff --git a/solutions/day-01/level_2.js b/solutions/day-01/level_2.js
new file mode 100644
index 0000000..3f36d95
--- /dev/null
+++ b/solutions/day-01/level_2.js
@@ -0,0 +1,51 @@
+import countries from "./modules/countries.js";
+import web_techs from "./modules/web_techs.js";
+
+let text = 'I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.'
+let textToSplitPeriod = text.split('.')
+let textToString = textToSplitPeriod.toString();
+let textTosplitComma = textToString.split(',');
+textToString = textTosplitComma.toString();
+let words = textToString.split(' ');
+console.log('words:', words);
+console.log(words.length);
+
+const shoppingCart = [
+ 'Milk', 'Coffee', 'Tea', 'Honey'
+];
+
+
+for (let i = 0; i < shoppingCart.length; i++) {
+ if (!shoppingCart.includes("Meat")) {
+ shoppingCart.unshift('Meat');
+ }
+ if (!shoppingCart.includes("Sugar")) {
+ shoppingCart.push("Sugar")
+ }
+ if (shoppingCart[i] == "Tea") {
+ shoppingCart[i] = "Green Tea"
+ }
+}
+console.log(shoppingCart);
+
+countries.forEach(country => {
+ if (country == "Ethiopia") {
+ console.log(country);
+ } else {
+ countries.push("Ethiopia");
+ }
+});
+
+web_techs.forEach(tech => {
+ if (tech == "Sass") {
+ console.log("Sass is a CSS preprocess");
+ } else if (!web_techs.includes("Sass")) {
+ web_techs.push("Sass");
+ }
+});
+console.log(web_techs);
+
+const frontEnd = ['HTML', 'CSS', 'JavaScript', 'React', 'Redux'];
+const backEnd = ['Node', 'Express', 'MongoDB'];
+const fullStack = frontEnd.concat(backEnd);
+console.log(fullStack);
\ No newline at end of file
diff --git a/solutions/day-01/level_3.js b/solutions/day-01/level_3.js
new file mode 100644
index 0000000..e521543
--- /dev/null
+++ b/solutions/day-01/level_3.js
@@ -0,0 +1,221 @@
+import countries from "./modules/countries.js";
+
+const ages = [
+ 19,
+ 22,
+ 19,
+ 24,
+ 20,
+ 25,
+ 26,
+ 24,
+ 25,
+ 24
+];
+
+const sortedAges = ages.sort();
+console.log("Min age:", sortedAges[0]);
+console.log("Max age:", sortedAges[sortedAges.length - 1]);
+console.log("Median age:", sortedAges[4] / 2);
+const initialValue = 0;
+const reducedAges = ages.reduce((previousValue, currentValue) =>
+ previousValue + currentValue, initialValue);
+console.log("Average age:", reducedAges / 2);
+console.log("Age range:", sortedAges[sortedAges.length - 1] - sortedAges[0]);
+const compareMin = (min, average) => {
+ return Math.abs(min - average);
+}
+const compareMax = (max, average) => {
+ return Math.abs(max - average);
+}
+console.log("Compare min:", compareMin(sortedAges[0], (reducedAges / 2)));
+console.log("Compare max:", compareMax(sortedAges[sortedAges.length - 1], (reducedAges / 2)));
+
+console.log(countries.slice());
+
+if (countries.length % 2 != 0) {
+ console.log('Middle countries:', countries[5], 'and', countries[6])
+}
+
+const firstHalf = [];
+const secondHalf = [];
+if ((countries.length - 6) % 2 != 0) {
+ for (let i = 0; i < countries.length - 6; i++) {
+ firstHalf.push(countries[i]);
+ }
+ for (let i = countries.length - 6; i < countries.length; i++) {
+ secondHalf.push(countries[i])
+ }
+};
+firstHalf.push("Italy")
+console.log(firstHalf.length, firstHalf)
+console.log(secondHalf.length, secondHalf)
+
+let userAgeInput = prompt("Enter your age: ");
+let userAge = parseInt(userAgeInput);
+let myAge = 31;
+
+switch (true) {
+ case userAge > 16:
+ console.log("You are old enough to drive")
+ break;
+ case userAge < 16:
+ console.log(`"You must wait ${16 - userAge} years to drive`)
+ default:
+ break;
+}
+
+if (userAge < myAge) {
+ console.log(`I am ${myAge - userAge} years older than you`)
+} else {
+ console.log(`You are ${userAge - myAge} years older than me`)
+}
+
+let a = 4;
+let b = 3;
+
+a < b
+ ? console.log(`${a} is less than ${b}`)
+ : console.log(`${b} is less than ${a}`)
+
+switch (true) {
+ case userAge % 2 == 0:
+ console.log(`${userAge} is an even number`);
+ break;
+ case userAge % 2 != 0:
+ console.log(`${userAge} is an odd number`);
+ break;
+ default:
+ break;
+}
+
+let scoreInput = prompt('Score: ');
+let studentScore = parseInt(scoreInput);
+if (80 < studentScore && studentScore < 100) {
+ console.log(`Student receives an A`)
+} else if (70 < studentScore && studentScore < 89) {
+ console.log(`Student receives a B`);
+} else if (60 < studentScore && studentScore < 69) {
+ console.log(`Student receives a C`);
+} else if (50 < studentScore && studentScore < 59) {
+ console.log(`Studnet receives a D`);
+} else if (0 < studentScore && studentScore < 49) {
+ console.log(`Student receives an F`);
+}
+
+let day = prompt('What is the day today?').toLowerCase();
+switch (day) {
+ case 'monday':
+ console.log(`${day} is a working day`);
+ break;
+ case 'tuesday':
+ console.log(`${day} is a working day`);
+ break;
+ case 'wednesday':
+ console.log(`${day} is a working day`);
+ break;
+ case 'thursday':
+ console.log(`${day} is a working day`);
+ break;
+ case 'friday':
+ console.log(`${day} is a working day`);
+ break;
+ case 'saturday':
+ console.log(`${day} is a weekend`);
+ break;
+ case 'sunday':
+ console.log(`${day} is a weekend`);
+ break;
+ default:
+ console.log(`Enter a valid day`);
+ break;
+}
+
+const month = prompt("Enter a month: ").toLowerCase();
+const leapYearInput = prompt("Is it a leap year?").toLocaleLowerCase();
+if (leapYearInput == 'yes') {
+ switch (month) {
+ case 'january':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'feburary':
+ console.log(`${month} has 29 days`);
+ break;
+ case 'march':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'april':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'may':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'june':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'july':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'august':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'september':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'october':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'november':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'december':
+ console.log(`${month} has 31 days`);
+ break;
+ default:
+ console.log(`Enter a month`);
+ break;
+ }
+} else {
+ switch (month) {
+ case 'january':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'feburary':
+ console.log(`${month} has 28 days`);
+ break;
+ case 'march':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'april':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'may':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'june':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'july':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'august':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'september':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'october':
+ console.log(`${month} has 31 days`);
+ break;
+ case 'november':
+ console.log(`${month} has 30 days`);
+ break;
+ case 'december':
+ console.log(`${month} has 31 days`);
+ break;
+ default:
+ console.log(`Enter a month`);
+ break;
+ }
+}
+
diff --git a/solutions/day-01/modules/countries.js b/solutions/day-01/modules/countries.js
new file mode 100644
index 0000000..cf92493
--- /dev/null
+++ b/solutions/day-01/modules/countries.js
@@ -0,0 +1,15 @@
+export const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya',
+]
+
+export default countries
\ No newline at end of file
diff --git a/solutions/day-01/modules/web_techs.js b/solutions/day-01/modules/web_techs.js
new file mode 100644
index 0000000..e7ff776
--- /dev/null
+++ b/solutions/day-01/modules/web_techs.js
@@ -0,0 +1,11 @@
+export const web_techs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+export default web_techs
\ No newline at end of file
diff --git a/solutions/day-01/object.js b/solutions/day-01/object.js
new file mode 100644
index 0000000..8f486e4
--- /dev/null
+++ b/solutions/day-01/object.js
@@ -0,0 +1,332 @@
+
+const dog = {};
+console.log(dog);
+dog.name = 'Spot';
+dog.legs = 4;
+dog.color = 'spotted';
+dog.age = 4;
+dog.bark = function () {
+ return 'woof woof';
+};
+console.log(dog.name);
+console.log(dog.legs);
+console.log(dog.color);
+console.log(dog.age);
+console.log(dog.bark());
+dog.breed = 'Dalmation';
+dog.getDogInfo = function () {
+ return `Hi! My name is ${this.name}! I am ${this.age} years old!`
+};
+console.log(dog.getDogInfo())
+
+const users = {
+ 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
+ }
+}
+
+console.log(users.Alex.skills.length);
+console.log(users.Asab.skills.length);
+console.log(users.Brook.skills.length);
+console.log(users.Daniel.skills.length);
+console.log(users.John.skills.length);
+console.log(users.Thomas.skills.length);
+console.log(users.Paul.skills.length);
+
+
+let usersLoggedIn = 0;
+let pointsOver50 = 0;
+if (users.Alex.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.Asab.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.Brook.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.Daniel.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.John.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.Thomas.isLoggedIn) {
+ usersLoggedIn++;
+}
+if (users.Alex.points >= 50) {
+ pointsOver50++;
+}
+if (users.Asab.points >= 50) {
+ pointsOver50++;
+}
+if (users.Brook.points >= 50) {
+ pointsOver50++;
+}
+if (users.Daniel.points >= 50) {
+ pointsOver50++;
+}
+if (users.John.points >= 50) {
+ pointsOver50++;
+}
+if (users.Thomas.points >= 50) {
+ pointsOver50++;
+}
+console.log(usersLoggedIn)
+console.log(pointsOver50)
+
+// MongoDB, Express, React, Node
+
+let mernDevs = 0;
+if (users.Asab.skills.includes('MongoDB')
+ && users.Asab.skills.includes('Express')
+ && users.Asab.skills.includes('React')
+ && users.Asab.skills.includes('Node'))
+ mernDevs++;
+if (users.Alex.skills.includes('MongoDB')
+ && users.Alex.skills.includes('Express')
+ && users.Alex.skills.includes('React')
+ && users.Alex.skills.includes('Node'))
+ mernDevs++;
+
+console.log(mernDevs);
+
+users.Libby = {
+ email: 'lsmarchetti01@gmail.com',
+ skills: ['HTML', 'CSS', 'JavaScript', 'TypeScript', 'Angular', 'React',
+ 'SQL', 'MongoDB', 'Express', 'Java', 'Springboot', 'Node'],
+ age: 31,
+ isLoggedIn: true,
+ points: 60
+}
+
+console.log(users.Libby);
+
+const entries = Object.entries(users)
+console.log(entries)
+
+const countries2 = {
+ USA: {
+ capital: 'Washington DC',
+ population: 1000,
+ language: ['English', 'Spanish', 'Node']
+ }
+}
+
+console.log(countries2.USA);
+
+const personAccount = {
+ firstName: 'Bob',
+ lastName: 'Bobert',
+ incomes: [53, 100, 98, 34],
+ expenses: [5, 66, 100],
+ totalIncome: function (incomes) {
+ const initial = 0;
+ let total = incomes.reduce((previous, current) =>
+ previous + current, initial
+ )
+ return total;
+ },
+ totalExpense: function (expenses) {
+ const initial = 0;
+ let total = expenses.reduce((previous, current) =>
+ previous + current, initial
+ )
+ return total;
+ },
+ addIncome: function (income) {
+ this.incomes.push(income);
+ },
+ addExpense: function (expense) {
+ this.expenses.push(expense)
+ },
+ accountBalance: function () {
+ let balance = this.totalIncome(this.incomes) - this.totalExpense(this.expenses)
+ return balance;
+ },
+ accountInfo: function () {
+ console.log(`${this.firstName} ${this.lastName}, your account balance is
+ ${this.accountBalance()}`)
+ }
+
+
+}
+
+console.log(personAccount.totalIncome(personAccount.incomes))
+console.log(personAccount.totalExpense(personAccount.expenses))
+personAccount.accountInfo();
+
+const usersArr = [
+ {
+ _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 userToAdd = {
+ _id: 'afwogf',
+ username: 'bob',
+ email: 'bob@bob.com',
+ passowrd: '5544234'
+};
+
+const userNotToAdd = {
+ _id: 'ghderc',
+ username: 'Thomas',
+ email: 'thomas@thomas.com',
+ password: '123333',
+ createdAt: '08/01/2020 10:00 AM',
+ isLoggedIn: false,
+};
+
+const signUp = (newUser) => {
+ let userExists = false;
+ usersArr.forEach(existingUser => {
+ if (newUser._id == existingUser._id) {
+ console.log('User already exists');
+ userExists = true;
+ }
+ })
+ if (!userExists) {
+ console.log('User added');
+ usersArr.push(newUser);
+ }
+}
+signUp(userToAdd)
+console.log(usersArr)
+
+const signIn = (user) => {
+ user.isLoggedIn = true;
+ console.log(user.isLoggedIn)
+}
+
+
+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'],
+ },
+]
+
+const rateProduct = (user, product) => {
+ for (let i = 0; i < products.length; i++) {
+ if (product._id == products[i]._id) {
+ product.ratings.push({ userId: user._id, rate: 1 });
+ console.log(products[i].ratings);
+ }
+ }
+}
+
+rateProduct(userNotToAdd, products[1]);
+
+const averageRating = (product) => {
+ const initial = 0;
+ console.log(average)
+}
+
+averageRating(products[0])
\ No newline at end of file