You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30-Days-Of-JavaScript/Exercise/08_day_object.md

348 lines
8.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Day 7 - Functions
## [Exercise:Solutions](#exercise-solutions)
- ### [Exercise:Level 1](#exercises-level-1)
- ### [Exercise:Level 2](#exercises-level-2)
- ### [Exercise:Level 3](#exercises-level-3) <hr>
#### [Home](../README.md) | [<< Day 6](./06_day_loops.md) | [Day 8 >>](./08_day_object.md)
## Exercise Solutions
### Exercises Level 1
1. Create an empty object called dog
```js
//app.js
dog = {}
```
2. Print the the dog object on the console
```js
//app.js
dog = {}
console.log(dog)
```
3. Add name, legs, color, age and bark properties for the dog object. The bark property is a method which return woof woof
```js
//app.js
dog = {
name:'garip',
legs:4,
age:6,
color:'black',
bark:'woof woof'
}
console.log(dog)
```
4. Get name, legs, color, age and bark value from the dog object
```js
//app.js
dog = {
name:'garip',
legs:4,
age:6,
color:'black',
bark:'woof woof'
}
console.log(dog.name)
console.log(dog.legs)
console.log(dog['age'])
console.log(dog['color'])
console.log(dog['bark'])
```
5. Set new properties the dog object: breed, getDogInfo
```js
//app.js
dog = {
name:'garip',
legs:4,
age:6,
color:'black',
bark:'woof woof'
}
dog.breed = 'kangal'
console.log(dog.breed)
```
### Exercises Level 2
1. Find the person who has many skills in the users object.
```js
//app.js
let maxSkills = 0;
let mostSkilledUser = "";
for (let user in users) {
if (users[user].skills.length > maxSkills) {
maxSkills = users[user].skills.length;
mostSkilledUser = user;
}
}
console.log(mostSkilledUser + " isimli kullanıcının yetenek sayısı: " + maxSkills);
```
2. Count logged in users, count users having greater than equal to 50 points from the following object.
```js
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
}
}
let pointsIsFifty = 0;
for (let user in users) {
if (users[user].points == 50) {
pointsIsFifty++;
}
}
console.log(pointsIsFifty);
```
3. Find people who are MERN stack developer from the users object
```js
//app.js
let mernStackDevelopers = [];
for (let user in users) {
if (users[user].skills.includes('MongoDB', 'Express', 'React', 'Node')) {
mernStackDevelopers.push(user);
}
}
console.log(mernStackDevelopers)
```
4. Set your name in the users object without modifying the original users object
```js
//app.js
const myName = "Nevzat";
const newUsers = {...users, [myName]: {email: 'bing@microsoft.com', skills: ['search', 'AI'], age: 3, isLoggedIn: true, points: 100}};
console.log(newUsers);
```
5. Get all keys or properties of users object
```js
//app.js
const keys = Object.keys(users);
console.log(keys);
```
6. Get all the values of users object
```js
//app.js
const value = Object.keys(users);
console.log(value);
```
7. Use the countries object to print a country name, capital, populations and languages.
```js
//app.js
for(let country in countries){
console.log(country)
console.log(countries[country].capital)
console.log(countries[country].populations)
console.log(countries[country].langue)
}
```
### Exercises Level 3
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.
```js
//app.js
const personAccount = {
firstName: "Nevzat",
lastName: "Atalay",
incomes: [
{description: "Maaş", amount: 5000},
{description: "Kira", amount: 1000},
{description: "Yatırım", amount: 2000}
],
expenses: [
{description: "Kira", amount: 500},
{description: "Yemek", amount: 200},
{description: "Eğlence", amount: 100}
],
totalIncome: function() {
let sum = 0;
for (let i = 0; i < this.incomes.length; i++) {
sum += this.incomes[i].amount;
}
return sum;
},
totalExpense: function() {
let sum = 0;
for (let i = 0; i < this.expenses.length; i++) {
sum += this.expenses[i].amount;
}
return sum;
},
accountInfo: function() {
return "Hesap sahibi: " + this.firstName + " " + this.lastName + "\nToplam gelir: " + this.totalIncome() + "\nToplam gider: " + this.totalExpense();
},
addIncome: function(description, amount) {
this.incomes.push({description: description, amount: amount});
},
addExpense: function(description, amount) {
this.expenses.push({description: description, amount: amount});
},
accountBalance: function() {
return this.totalIncome() - this.totalExpense();
}
};
console.log(personAccount.accountInfo());
personAccount.addIncome("Bonus", 1000);
personAccount.addExpense("Kira", 750);
console.log(personAccount.accountBalance());
```
2. **** Questions:2, 3 and 4 are based on the following two arrays:users and products ()
```js
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.
b. Create a function called signIn which allows user to sign in to the application
3. The products array has three elements and each of them has six properties.
a. Create a function called rateProduct which rates the product
b. Create a function called averageRating which calculate the average rating of a product
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.