diff --git a/ID/.gitignore b/ID/.gitignore
new file mode 100644
index 0000000..fa0dfa4
--- /dev/null
+++ b/ID/.gitignore
@@ -0,0 +1,19 @@
+draft.md
+playground
+/playground
+.DS_Store
+test.js
+res.md
+day3.md
+day4.md
+day5.md
+day6.md
+day7.md
+day8.md
+day9.md
+day10.md
+01_02_03_days_backup.md
+test.md
+31_Day
+test.html
+res.js
\ No newline at end of file
diff --git a/ID/01_Day_Introduction/01_day_starter/helloworld.js b/ID/01_Day_Introduction/01_day_starter/helloworld.js
new file mode 100644
index 0000000..8c9e2c0
--- /dev/null
+++ b/ID/01_Day_Introduction/01_day_starter/helloworld.js
@@ -0,0 +1 @@
+console.log('Hello, World!')
\ No newline at end of file
diff --git a/ID/01_Day_Introduction/01_day_starter/index.html b/ID/01_Day_Introduction/01_day_starter/index.html
new file mode 100644
index 0000000..43831f6
--- /dev/null
+++ b/ID/01_Day_Introduction/01_day_starter/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+ 30DaysOfJavaScript
+
+
+
+
30DaysOfJavaScript:03 Day
+
Introduction
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/01_Day_Introduction/01_day_starter/introduction.js b/ID/01_Day_Introduction/01_day_starter/introduction.js
new file mode 100644
index 0000000..316199c
--- /dev/null
+++ b/ID/01_Day_Introduction/01_day_starter/introduction.js
@@ -0,0 +1 @@
+console.log('Welcome to 30DaysOfJavaScript')
\ No newline at end of file
diff --git a/ID/01_Day_Introduction/01_day_starter/main.js b/ID/01_Day_Introduction/01_day_starter/main.js
new file mode 100644
index 0000000..2b952bc
--- /dev/null
+++ b/ID/01_Day_Introduction/01_day_starter/main.js
@@ -0,0 +1,4 @@
+// the variable values can be accessed from other variable.js file
+console.log(firstName, lastName, country, city, age, isMarried)
+console.log(gravity, boilingPoint, PI) // 9.81, 100, 3.14
+console.log(name, job, live)
\ No newline at end of file
diff --git a/ID/01_Day_Introduction/01_day_starter/varaible.js b/ID/01_Day_Introduction/01_day_starter/varaible.js
new file mode 100644
index 0000000..62558cb
--- /dev/null
+++ b/ID/01_Day_Introduction/01_day_starter/varaible.js
@@ -0,0 +1,20 @@
+// Declaring different variables of different data types
+
+let firstName = 'Asabeneh' // first name of a person
+let lastName = 'Yetayeh' // last name of a person
+let country = 'Finland' // country
+let city = 'Helsinki' // capital city
+let age = 100 // age in years
+let isMarried = true
+
+// Declaring variables with number values
+
+const gravity = 9.81 // earth gravity in m/s2
+const boilingPoint = 100 // water boiling point, temperature in oC
+const PI = 3.14 // geometrical constant
+
+// Variables can also be declaring in one line separated by comma
+
+let name = 'Asabeneh', //name of a person
+ job = 'teacher',
+ live = 'Finland'
diff --git a/ID/01_Day_Introduction/variable.js b/ID/01_Day_Introduction/variable.js
new file mode 100644
index 0000000..f5872af
--- /dev/null
+++ b/ID/01_Day_Introduction/variable.js
@@ -0,0 +1,17 @@
+// Declaring different variables of different data types
+let firstName = 'Asabeneh' // first name of a person
+let lastName = 'Yetayeh' // last name of a person
+let country = 'Finland' // country
+let city = 'Helsinki' // capital city
+let age = 100 // age in years
+let isMarried = true
+
+// Declaring variables with number values
+const gravity = 9.81 // earth gravity in m/s2
+const boilingPoint = 100 // water boiling point, temperature in oC
+const PI = 3.14 // geometrical constant
+
+// Variables can also be declaring in one line separated by comma
+let name = 'Asabeneh', //name of a person
+ job = 'teacher',
+ live = 'Finland'
diff --git a/ID/02_Day_Data_types/02_day_data_types.md b/ID/02_Day_Data_types/02_day_data_types.md
new file mode 100644
index 0000000..198ae2b
--- /dev/null
+++ b/ID/02_Day_Data_types/02_day_data_types.md
@@ -0,0 +1,976 @@
+
+
+
+[<< Day 1](../readMe.md) | [Day 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
+
+
+
+- [📔 Day 2](#-day-2)
+ - [Data Types](#data-types)
+ - [Primitive Data Types](#primitive-data-types)
+ - [Non-Primitive Data Types](#non-primitive-data-types)
+ - [Numbers](#numbers)
+ - [Declaring Number Data Types](#declaring-number-data-types)
+ - [Math Object](#math-object)
+ - [Random Number Generator](#random-number-generator)
+ - [Strings](#strings)
+ - [String Concatenation](#string-concatenation)
+ - [Concatenating Using Addition Operator](#concatenating-using-addition-operator)
+ - [Long Literal Strings](#long-literal-strings)
+ - [Escape Sequences in Strings](#escape-sequences-in-strings)
+ - [Template Literals (Template Strings)](#template-literals-template-strings)
+ - [String Methods](#string-methods)
+ - [Checking Data Types and Casting](#checking-data-types-and-casting)
+ - [Checking Data Types](#checking-data-types)
+ - [Changing Data Type (Casting)](#changing-data-type-casting)
+ - [String to Int](#string-to-int)
+ - [String to Float](#string-to-float)
+ - [Float to Int](#float-to-int)
+ - [💻 Day 2: Exercises](#-day-2-exercises)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 2
+
+## Data Types
+
+In the previous section, we mentioned a little bit about data types. Data or values have data types. Data types describe the characteristics of data. Data types can be divided into two:
+
+1. Primitive data types
+2. Non-primitive data types(Object References)
+
+### Primitive Data Types
+
+Primitive data types in JavaScript include:
+
+ 1. Numbers - Integers, floats
+ 2. Strings - Any data under single quote, double quote or backtick quote
+ 3. Booleans - true or false value
+ 4. Null - empty value or no value
+ 5. Undefined - a declared variable without a value
+
+Non-primitive data types in JavaScript includes:
+
+1. Objects
+2. Functions
+3. Arrays
+
+Now, let us see what exactly primitive and non-primitive data types mean.
+*Primitive* data types are immutable(non-modifiable) data types. Once a primitive data type is created we cannot modify it.
+
+**Example:**
+
+```js
+let word = 'JavaScript'
+```
+
+If we try to modify the string stored in variable *word*, JavaScript should raise an error. Any data type under a single quote, double quote, or backtick quote is a string data type.
+
+```js
+word[0] = 'Y'
+```
+
+This expression does not change the string stored in the variable *word*. So, we can say that strings are not modifiable or in other words immutable.
+Primitive data types are compared by its values. Let us compare different data values. See the example below:
+
+```js
+let numOne = 3
+let numTwo = 3
+
+console.log(numOne == numTwo) // true
+
+let js = 'JavaScript'
+let py = 'Python'
+
+console.log(js == py) //false
+
+let lightOn = true
+let lightOff = false
+
+console.log(lightOn == lightOff) // false
+```
+
+### Non-Primitive Data Types
+
+*Non-primitive* data types are modifiable or mutable. We can modify the value of non-primitive data types after it gets created.
+Let us see by creating an array. An array is a list of data values in a square bracket. Arrays can contain the same or different data types. Array values are referenced by their index. In JavaScript array index starts at zero. I.e., the first element of an array is found at index zero, the second element at index one, and the third element at index two, etc.
+
+```js
+let nums = [1, 2, 3]
+nums[0] = 10
+
+console.log(nums) // [10, 2, 3]
+```
+
+As you can see, an array, which is a non-primitive data type is mutable. Non-primitive data types cannot be compared by value. Even if two non-primitive data types have the same properties and values, they are not strictly equal.
+
+```js
+let nums = [1, 2, 3]
+let numbers = [1, 2, 3]
+
+console.log(nums == numbers) // false
+
+let userOne = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+
+let userTwo = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+
+console.log(userOne == userTwo) // false
+```
+
+Rule of thumb, we do not compare non-primitive data types. Do not compare arrays, functions, or objects.
+Non-primitive values are referred to as reference types, because they are being compared by reference instead of value. Two objects are only strictly equal if they refer to the same underlying object.
+
+```js
+let nums = [1, 2, 3]
+let numbers = nums
+
+console.log(nums == numbers) // true
+
+let userOne = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+
+let userTwo = userOne
+
+console.log(userOne == userTwo) // true
+```
+
+If you have a hard time understanding the difference between primitive data types and non-primitive data types, you are not the only one. Calm down and just go to the next section and try to come back after some time. Now let us start the data types by number type.
+
+## Numbers
+
+Numbers are integers and decimal values which can do all the arithmetic operations.
+Let's see some examples of Numbers.
+
+### Declaring Number Data Types
+
+```js
+let age = 35
+const gravity = 9.81 // we use const for non-changing values, gravitational constant in m/s2
+let mass = 72 // mass in Kilogram
+const PI = 3.14 // pi a geometrical constant
+
+// More Examples
+const boilingPoint = 100 // temperature in oC, boiling point of water which is a constant
+const bodyTemp = 37 // oC average human body temperature, which is a constant
+
+console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
+```
+
+### Math Object
+
+In JavaScript the Math Object provides a lots of methods to work with numbers.
+
+```js
+const PI = Math.PI
+
+console.log(PI) // 3.141592653589793
+
+// Rounding to the closest number
+// if above .5 up if less 0.5 down rounding
+
+console.log(Math.round(PI)) // 3 to round values to the nearest number
+
+console.log(Math.round(9.81)) // 10
+
+console.log(Math.floor(PI)) // 3 rounding down
+
+console.log(Math.ceil(PI)) // 4 rounding up
+
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5, returns the minimum value
+
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20, returns the maximum value
+
+const randNum = Math.random() // creates random number between 0 to 0.999999
+console.log(randNum)
+
+// Let us create random number between 0 to 10
+
+const num = Math.floor(Math.random () * 11) // creates random number between 0 and 10
+console.log(num)
+
+//Absolute value
+console.log(Math.abs(-10)) // 10
+
+//Square root
+console.log(Math.sqrt(100)) // 10
+
+console.log(Math.sqrt(2)) // 1.4142135623730951
+
+// Power
+console.log(Math.pow(3, 2)) // 9
+
+console.log(Math.E) // 2.718
+
+// Logarithm
+// Returns the natural logarithm with base E of x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Trigonometry
+Math.sin(0)
+Math.sin(60)
+
+Math.cos(0)
+Math.cos(60)
+```
+
+#### Random Number Generator
+
+The JavaScript Math Object has a random() method number generator which generates number from 0 to 0.999999999...
+
+```js
+let randomNum = Math.random() // generates 0 to 0.999...
+```
+
+Now, let us see how we can use random() method to generate a random number between 0 and 10:
+
+```js
+let randomNum = Math.random() // generates 0 to 0.999
+let numBtnZeroAndTen = randomNum * 11
+
+console.log(numBtnZeroAndTen) // this gives: min 0 and max 10.99
+
+let randomNumRoundToFloor = Math.floor(numBtnZeroAndTen)
+console.log(randomNumRoundToFloor) // this gives between 0 and 10
+```
+
+## Strings
+
+Strings are texts, which are under **_single_** , **_double_**, **_back-tick_** quote. To declare a string, we need a variable name, assignment operator, a value under a single quote, double quote, or backtick quote.
+Let's see some examples of strings:
+
+```js
+let space = ' ' // an empty space string
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+let quote = "The saying,'Seeing is Believing' is not correct in 2020."
+let quotWithBackTick = `The saying,'Seeing is Believing' is not correct in 2020.`
+```
+
+### String Concatenation
+
+Connecting two or more strings together is called concatenation.
+Using the strings declared in the previous String section:
+
+```js
+let fullName = firstName + space + lastName; // concatenation, merging two string together.
+console.log(fullName);
+```
+
+```sh
+Asabeneh Yetayeh
+```
+
+We can concatenate strings in different ways.
+
+#### Concatenating Using Addition Operator
+
+Concatenating using the addition operator is an old way. This way of concatenating is tedious and error-prone. It is good to know how to concatenate this way, but I strongly suggest to use the ES6 template strings (explained later on).
+
+```js
+// Declaring different variables of different data types
+let space = ' '
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+let age = 250
+
+
+let fullName =firstName + space + lastName
+let personInfoOne = fullName + '. I am ' + age + '. I live in ' + country; // ES5 string addition
+
+console.log(personInfoOne)
+```
+
+```sh
+Asabeneh Yetayeh. I am 250. I live in Finland
+```
+
+#### Long Literal Strings
+
+A string could be a single character or paragraph or a page. If the string length is too big it does not fit in one line. We can use the backslash character (\\) at the end of each line to indicate that the string will continue on the next line.
+**Example:**
+
+```js
+const paragraph = "My name is Asabeneh Yetayeh. I live in Finland, Helsinki.\
+I am a teacher and I love teaching. I teach HTML, CSS, JavaScript, React, Redux, \
+Node.js, Python, Data Analysis and D3.js for anyone who is interested to learn. \
+In the end of 2019, I was thinking to expand my teaching and to reach \
+to global audience and I started a Python challenge from November 20 - December 19.\
+It was one of the most rewarding and inspiring experience.\
+Now, we are in 2020. I am enjoying preparing the 30DaysOfJavaScript challenge and \
+I hope you are enjoying too."
+
+console.log(paragraph)
+```
+
+#### Escape Sequences in Strings
+
+In JavaScript and other programming languages \ followed by some characters is an escape sequence. Let's see the most common escape characters:
+
+- \n: new line
+- \t: Tab, means 8 spaces
+- \\\\: Back slash
+- \\': Single quote (')
+- \\": Double quote (")
+
+```js
+console.log('I hope everyone is enjoying the 30 Days Of JavaScript challenge.\nDo you ?') // line break
+console.log('Days\tTopics\tExercises')
+console.log('Day 1\t3\t5')
+console.log('Day 2\t3\t5')
+console.log('Day 3\t3\t5')
+console.log('Day 4\t3\t5')
+console.log('This is a backslash symbol (\\)') // To write a backslash
+console.log('In every programming language it starts with \"Hello, World!\"')
+console.log("In every programming language it starts with \'Hello, World!\'")
+console.log('The saying \'Seeing is Believing\' isn\'t correct in 2020')
+```
+
+Output in console:
+
+```sh
+I hope everyone is enjoying the 30 Days Of JavaScript challenge.
+Do you ?
+Days Topics Exercises
+Day 1 3 5
+Day 2 3 5
+Day 3 3 5
+Day 4 3 5
+This is a backslash symbol (\)
+In every programming language it starts with "Hello, World!"
+In every programming language it starts with 'Hello, World!'
+The saying 'Seeing is Believing' isn't correct in 2020
+```
+
+#### Template Literals (Template Strings)
+
+To create a template strings, we use two back-ticks. We can inject data as expressions inside a template string. To inject data, we enclose the expression with a curly bracket({}) preceded by a $ sign. See the syntax below.
+
+```js
+//Syntax
+`String literal text`
+`String literal text ${expression}`
+```
+
+**Example: 1**
+
+```js
+console.log(`The sum of 2 and 3 is 5`) // statically writing the data
+let a = 2
+let b = 3
+console.log(`The sum of ${a} and ${b} is ${a + b}`) // injecting the data dynamically
+```
+
+**Example:2**
+
+```js
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+let age = 250
+let fullName = firstName + ' ' + lastName
+
+let personInfoTwo = `I am ${fullName}. I am ${age}. I live in ${country}.` //ES6 - String interpolation method
+let personInfoThree = `I am ${fullName}. I live in ${city}, ${country}. I am a ${job}. I teach ${language}.`
+console.log(personInfoTwo)
+console.log(personInfoThree)
+```
+
+```sh
+I am Asabeneh Yetayeh. I am 250. I live in Finland.
+I am Asabeneh Yetayeh. I live in Helsinki, Finland. I am a teacher. I teach JavaScript.
+```
+
+Using a string template or string interpolation method, we can add expressions, which could be a value, or some operations (comparison, arithmetic operations, ternary operation).
+
+```js
+let a = 2
+let b = 3
+console.log(`${a} is greater than ${b}: ${a > b}`)
+```
+
+```sh
+2 is greater than 3: false
+```
+
+### String Methods
+
+Everything in JavaScript is an object. A string is a primitive data type that means we can not modify it once it is created. The string object has many string methods. There are different string methods that can help us to work with strings.
+
+1. *length*: The string *length* method returns the number of characters in a string included empty space.
+
+**Example:**
+
+```js
+let js = 'JavaScript'
+console.log(js.length) // 10
+let firstName = 'Asabeneh'
+console.log(firstName.length) // 8
+```
+
+2. *Accessing characters in a string*: We can access each character in a string using its index. In programming, counting starts from 0. The first index of the string is zero, and the last index is the length of the string minus one.
+
+ 
+
+Let us access different characters in 'JavaScript' string.
+
+```js
+let string = 'JavaScript'
+let firstLetter = string[0]
+
+console.log(firstLetter) // J
+
+let secondLetter = string[1] // a
+let thirdLetter = string[2]
+let lastLetter = string[9]
+
+console.log(lastLetter) // t
+
+let lastIndex = string.length - 1
+
+console.log(lastIndex) // 9
+console.log(string[lastIndex]) // t
+```
+
+3. *toUpperCase()*: this method changes the string to uppercase letters.
+
+```js
+let string = 'JavaScript'
+
+console.log(string.toUpperCase()) // JAVASCRIPT
+
+let firstName = 'Asabeneh'
+
+console.log(firstName.toUpperCase()) // ASABENEH
+
+let country = 'Finland'
+
+console.log(country.toUpperCase()) // FINLAND
+```
+
+4. *toLowerCase()*: this method changes the string to lowercase letters.
+
+```js
+let string = 'JavasCript'
+
+console.log(string.toLowerCase()) // javascript
+
+let firstName = 'Asabeneh'
+
+console.log(firstName.toLowerCase()) // asabeneh
+
+let country = 'Finland'
+
+console.log(country.toLowerCase()) // finland
+```
+
+5. *substr()*: It takes two arguments, the starting index and number of characters to slice.
+
+```js
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+
+let country = 'Finland'
+console.log(country.substr(3, 4)) // land
+```
+
+6. *substring()*: It takes two arguments, the starting index and the stopping index but it doesn't include the character at the stopping index.
+
+```js
+let string = 'JavaScript'
+
+console.log(string.substring(0,4)) // Java
+console.log(string.substring(4,10)) // Script
+console.log(string.substring(4)) // Script
+
+let country = 'Finland'
+
+console.log(country.substring(0, 3)) // Fin
+console.log(country.substring(3, 7)) // land
+console.log(country.substring(3)) // land
+```
+
+7. *split()*: The split method splits a string at a specified place.
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.split()) // Changes to an array -> ["30 Days Of JavaScript"]
+console.log(string.split(' ')) // Split to an array at space -> ["30", "Days", "Of", "JavaScript"]
+
+let firstName = 'Asabeneh'
+
+console.log(firstName.split()) // Change to an array - > ["Asabeneh"]
+console.log(firstName.split('')) // Split to an array at each letter -> ["A", "s", "a", "b", "e", "n", "e", "h"]
+
+let countries = 'Finland, Sweden, Norway, Denmark, and Iceland'
+
+console.log(countries.split(',')) // split to any array at comma -> ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(countries.split(', ')) // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
+```
+
+8. *trim()*: Removes trailing space in the beginning or the end of a string.
+
+```js
+let string = ' 30 Days Of JavaScript '
+
+console.log(string)
+console.log(string.trim(' '))
+
+let firstName = ' Asabeneh '
+
+console.log(firstName)
+console.log(firstName.trim()) // still removes spaces at the beginning and the end of the string
+```
+
+```sh
+ 30 Days Of JavasCript
+30 Days Of JavasCript
+ Asabeneh
+Asabeneh
+```
+
+9. *includes()*: It takes a substring argument and it checks if substring argument exists in the string. *includes()* returns a boolean. If a substring exist in a string, it returns true, otherwise it returns false.
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.includes('Days')) // true
+console.log(string.includes('days')) // false - it is case sensitive!
+console.log(string.includes('Script')) // true
+console.log(string.includes('script')) // false
+console.log(string.includes('java')) // false
+console.log(string.includes('Java')) // true
+
+let country = 'Finland'
+
+console.log(country.includes('fin')) // false
+console.log(country.includes('Fin')) // true
+console.log(country.includes('land')) // true
+console.log(country.includes('Land')) // false
+```
+
+10. *replace()*: takes as a parameter the old substring and a new substring.
+
+```js
+string.replace(oldsubstring, newsubstring)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.replace('JavaScript', 'Python')) // 30 Days Of Python
+
+let country = 'Finland'
+console.log(country.replace('Fin', 'Noman')) // Nomanland
+```
+
+11. *charAt()*: Takes index and it returns the value at that index
+
+```js
+string.charAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charAt(0)) // 3
+
+let lastIndex = string.length - 1
+console.log(string.charAt(lastIndex)) // t
+```
+
+12. *charCodeAt()*: Takes index and it returns char code (ASCII number) of the value at that index
+
+```js
+string.charCodeAt(index)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+console.log(string.charCodeAt(3)) // D ASCII number is 68
+
+let lastIndex = string.length - 1
+console.log(string.charCodeAt(lastIndex)) // t ASCII is 116
+
+```
+
+13. *indexOf()*: Takes a substring and if the substring exists in a string it returns the first position of the substring if does not exist it returns -1
+
+```js
+string.indexOf(substring)
+```
+
+```js
+let string = '30 Days Of JavaScript'
+
+console.log(string.indexOf('D')) // 3
+console.log(string.indexOf('Days')) // 3
+console.log(string.indexOf('days')) // -1
+console.log(string.indexOf('a')) // 4
+console.log(string.indexOf('JavaScript')) // 11
+console.log(string.indexOf('Script')) //15
+console.log(string.indexOf('script')) // -1
+```
+
+14. *lastIndexOf()*: Takes a substring and if the substring exists in a string it returns the last position of the substring if it does not exist it returns -1
+
+
+```js
+//syntax
+string.lastIndexOf(substring)
+```
+
+```js
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+
+console.log(string.lastIndexOf('love')) // 67
+console.log(string.lastIndexOf('you')) // 63
+console.log(string.lastIndexOf('JavaScript')) // 38
+```
+
+15. *concat()*: it takes many substrings and joins them.
+
+```js
+string.concat(substring, substring, substring)
+```
+
+```js
+let string = '30'
+console.log(string.concat("Days", "Of", "JavaScript")) // 30DaysOfJavaScript
+
+let country = 'Fin'
+console.log(country.concat("land")) // Finland
+```
+
+16. *startsWith*: it takes a substring as an argument and it checks if the string starts with that specified substring. It returns a boolean(true or false).
+
+```js
+//syntax
+string.startsWith(substring)
+```
+
+```js
+let string = 'Love is the best to in this world'
+
+console.log(string.startsWith('Love')) // true
+console.log(string.startsWith('love')) // false
+console.log(string.startsWith('world')) // false
+
+let country = 'Finland'
+
+console.log(country.startsWith('Fin')) // true
+console.log(country.startsWith('fin')) // false
+console.log(country.startsWith('land')) // false
+```
+
+17. *endsWith*: it takes a substring as an argument and it checks if the string ends with that specified substring. It returns a boolean(true or false).
+
+```js
+string.endsWith(substring)
+```
+
+```js
+let string = 'Love is the most powerful feeling in the world'
+
+console.log(string.endsWith('world')) // true
+console.log(string.endsWith('love')) // false
+console.log(string.endsWith('in the world')) // true
+
+let country = 'Finland'
+
+console.log(country.endsWith('land')) // true
+console.log(country.endsWith('fin')) // false
+console.log(country.endsWith('Fin')) // false
+```
+
+18. *search*: it takes a substring as an argument and it returns the index of the first match. The search value can be a string or a regular expression pattern.
+
+```js
+string.search(substring)
+```
+
+```js
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+console.log(string.search('love')) // 2
+console.log(string.search(/javascript/gi)) // 7
+```
+
+19. *match*: it takes a substring or regular expression pattern as an argument and it returns an array if there is match if not it returns null. Let us see how a regular expression pattern looks like. It starts with / sign and ends with / sign.
+
+```js
+let string = 'love'
+let patternOne = /love/ // with out any flag
+let patternTwo = /love/gi // g-means to search in the whole text, i - case insensitive
+```
+
+Match syntax
+
+```js
+// syntax
+string.match(substring)
+```
+
+```js
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+console.log(string.match('love'))
+```
+
+```sh
+["love", index: 2, input: "I love JavaScript. If you do not love JavaScript what else can you love.", groups: undefined]
+```
+
+```js
+let pattern = /love/gi
+console.log(string.match(pattern)) // ["love", "love", "love"]
+```
+
+Let us extract numbers from text using a regular expression. This is not the regular expression section, do not panic! We will cover regular expressions later on.
+
+```js
+let txt = 'In 2019, I ran 30 Days of Python. Now, in 2020 I am super exited to start this challenge'
+let regEx = /\d+/
+
+// d with escape character means d not a normal d instead acts a digit
+// + means one or more digit numbers,
+// if there is g after that it means global, search everywhere.
+
+console.log(txt.match(regEx)) // ["2", "0", "1", "9", "3", "0", "2", "0", "2", "0"]
+console.log(txt.match(/\d+/g)) // ["2019", "30", "2020"]
+```
+
+20. *repeat()*: it takes a number as argument and it returns the repeated version of the string.
+
+```js
+string.repeat(n)
+```
+
+```js
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
+```
+
+## Checking Data Types and Casting
+
+### Checking Data Types
+
+To check the data type of a certain variable we use the _typeof_ method.
+
+**Example:**
+
+```js
+// Different javascript data types
+// Let's declare different data types
+
+let firstName = 'Asabeneh' // string
+let lastName = 'Yetayeh' // string
+let country = 'Finland' // string
+let city = 'Helsinki' // string
+let age = 250 // number, it is not my real age, do not worry about it
+let job // undefined, because a value was not assigned
+
+console.log(typeof 'Asabeneh') // string
+console.log(typeof firstName) // string
+console.log(typeof 10) // number
+console.log(typeof 3.14) // number
+console.log(typeof true) // boolean
+console.log(typeof false) // boolean
+console.log(typeof NaN) // number
+console.log(typeof job) // undefined
+console.log(typeof undefined) // undefined
+console.log(typeof null) // object
+```
+
+### Changing Data Type (Casting)
+
+- Casting: Converting one data type to another data type. We use _parseInt()_, _parseFloat()_, _Number()_, _+ sign_, _str()_
+ When we do arithmetic operations string numbers should be first converted to integer or float if not it returns an error.
+
+#### String to Int
+
+We can convert string number to a number. Any number inside a quote is a string number. An example of a string number: '10', '5', etc.
+We can convert string to number using the following methods:
+
+- parseInt()
+- Number()
+- Plus sign(+)
+
+```js
+let num = '10'
+let numInt = parseInt(num)
+console.log(numInt) // 10
+```
+
+```js
+let num = '10'
+let numInt = Number(num)
+
+console.log(numInt) // 10
+```
+
+```js
+let num = '10'
+let numInt = +num
+
+console.log(numInt) // 10
+```
+
+#### String to Float
+
+We can convert string float number to a float number. Any float number inside a quote is a string float number. An example of a string float number: '9.81', '3.14', '1.44', etc.
+We can convert string float to number using the following methods:
+
+- parseFloat()
+- Number()
+- Plus sign(+)
+
+```js
+let num = '9.81'
+let numFloat = parseFloat(num)
+
+console.log(numFloat) // 9.81
+```
+
+```js
+let num = '9.81'
+let numFloat = Number(num)
+
+console.log(numFloat) // 9.81
+```
+
+```js
+let num = '9.81'
+let numFloat = +num
+
+console.log(numInt) // 9.81
+```
+
+#### Float to Int
+
+We can convert float numbers to integers.
+We use the following method to convert float to int:
+
+- parseInt()
+
+```js
+let num = 9.81
+let numInt = parseInt(num)
+
+console.log(numInt) // 9
+```
+
+🌕 You are awesome. You have just completed day 2 challenges and you are two steps ahead on your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Day 2: Exercises
+
+### Exercise: Level 1
+
+1. Declare a variable named challenge and assign it to an initial value **'30 Days Of JavaScript'**.
+2. Print the string on the browser console using __console.log()__
+3. Print the __length__ of the string on the browser console using _console.log()_
+4. Change all the string characters to capital letters using __toUpperCase()__ method
+5. Change all the string characters to lowercase letters using __toLowerCase()__ method
+6. Cut (slice) out the first word of the string using __substr()__ or __substring()__ method
+7. Slice out the phrase *Days Of JavaScript* from *30 Days Of JavaScript*.
+8. Check if the string contains a word __Script__ using __includes()__ method
+9. Split the __string__ into an __array__ using __split()__ method
+10. Split the string 30 Days Of JavaScript at the space using __split()__ method
+11. 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon' __split__ the string at the comma and change it to an array.
+12. Change 30 Days Of JavaScript to 30 Days Of Python using __replace()__ method.
+13. What is character at index 15 in '30 Days Of JavaScript' string? Use __charAt()__ method.
+14. What is the character code of J in '30 Days Of JavaScript' string using __charCodeAt()__
+15. Use __indexOf__ to determine the position of the first occurrence of __a__ in 30 Days Of JavaScript
+16. Use __lastIndexOf__ to determine the position of the last occurrence of __a__ in 30 Days Of JavaScript.
+17. Use __indexOf__ to find the position of the first occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
+18. Use __lastIndexOf__ to find the position of the last occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
+19. Use __search__ to find the position of the first occurrence of the word __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
+20. Use __trim()__ to remove any trailing whitespace at the beginning and the end of a string.E.g ' 30 Days Of JavaScript '.
+21. Use __startsWith()__ method with the string *30 Days Of JavaScript* and make the result true
+22. Use __endsWith()__ method with the string *30 Days Of JavaScript* and make the result true
+23. Use __match()__ method to find all the __a__’s in 30 Days Of JavaScript
+24. Use __concat()__ and merge '30 Days of' and 'JavaScript' to a single string, '30 Days Of JavaScript'
+25. Use __repeat()__ method to print 30 Days Of JavaScript 2 times
+
+### Exercise: Level 2
+
+1. Using console.log() print out the following statement:
+
+ ```sh
+ The quote 'There is no exercise better for the heart than reaching down and lifting people up.' by John Holmes teaches us to help one another.
+ ```
+
+2. Using console.log() print out the following quote by Mother Teresa:
+
+ ```sh
+ "Love is not patronizing and charity isn't about pity, it is about love. Charity and love are the same -- with charity you give love, so don't just give money but reach out your hand instead."
+ ```
+
+3. Check if typeof '10' is exactly equal to 10. If not make it exactly equal.
+4. Check if parseFloat('9.8') is equal to 10 if not make it exactly equal with 10.
+5. Check if 'on' is found in both python and jargon
+6. _I hope this course is not full of jargon_. Check if _jargon_ is in the sentence.
+7. Generate a random number between 0 and 100 inclusively.
+8. Generate a random number between 50 and 100 inclusively.
+9. Generate a random number between 0 and 255 inclusively.
+10. Access the 'JavaScript' string characters using a random number.
+11. Use console.log() and escape characters to print the following pattern.
+
+ ```js
+ 1 1 1 1 1
+ 2 1 2 4 8
+ 3 1 3 9 27
+ 4 1 4 16 64
+ 5 1 5 25 125
+ ```
+
+12. Use __substr__ to slice out the phrase __because because because__ from the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
+
+### Exercises: Level 3
+
+1. 'Love is the best thing in this world. Some found their love and some are still looking for their love.' Count the number of word __love__ in this sentence.
+2. Use __match()__ to count the number of all __because__ in the following sentence:__'You cannot end a sentence with because because because is a conjunction'__
+3. Clean the following text and find the most frequent word (hint, use replace and regular expressions).
+
+ ```js
+ const sentence = '%I $am@% a %tea@cher%, &and& I lo%#ve %te@a@ching%;. The@re $is no@th@ing; &as& mo@re rewarding as educa@ting &and& @emp%o@weri@ng peo@ple. ;I found tea@ching m%o@re interesting tha@n any ot#her %jo@bs. %Do@es thi%s mo@tiv#ate yo@u to be a tea@cher!? %Th#is 30#Days&OfJavaScript &is al@so $the $resu@lt of &love& of tea&ching'
+ ```
+
+4. Calculate the total annual income of the person by extracting the numbers from the following text. 'He earns 5000 euro from salary per month, 10000 euro annual bonus, 15000 euro online courses per month.'
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 1](../readMe.md) | [Day 3 >>](../03_Day_Booleans_operators_date/03_booleans_operators_date.md)
diff --git a/ID/02_Day_Data_types/02_day_starter/index.html b/ID/02_Day_Data_types/02_day_starter/index.html
new file mode 100644
index 0000000..03ea938
--- /dev/null
+++ b/ID/02_Day_Data_types/02_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript
+
+
+
+
30DaysOfJavaScript:02 Day
+
Data types
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/02_day_starter/main.js b/ID/02_Day_Data_types/02_day_starter/main.js
new file mode 100644
index 0000000..7762908
--- /dev/null
+++ b/ID/02_Day_Data_types/02_day_starter/main.js
@@ -0,0 +1 @@
+// this is your main.js script
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/day_1_2.png b/ID/02_Day_Data_types/day_1_2.png
new file mode 100644
index 0000000..0f6eefb
Binary files /dev/null and b/ID/02_Day_Data_types/day_1_2.png differ
diff --git a/ID/02_Day_Data_types/math_object.js b/ID/02_Day_Data_types/math_object.js
new file mode 100644
index 0000000..784b2ae
--- /dev/null
+++ b/ID/02_Day_Data_types/math_object.js
@@ -0,0 +1,34 @@
+const PI = Math.PI
+console.log(PI) // 3.141592653589793
+console.log(Math.round(PI)) // 3; to round values to the nearest number
+console.log(Math.round(9.81)) // 10
+console.log(Math.floor(PI)) // 3; rounding down
+console.log(Math.ceil(PI)) // 4; rounding up
+console.log(Math.min(-5, 3, 20, 4, 5, 10)) // -5, returns the minimum value
+console.log(Math.max(-5, 3, 20, 4, 5, 10)) // 20, returns the maximum value
+
+const randNum = Math.random() // creates random number between 0 to 0.999999
+console.log(randNum)
+// Let create random number between 0 to 10
+const num = Math.floor(Math.random() * 11) // creates random number between 0 and 10
+console.log(num)
+
+//Absolute value
+console.log(Math.abs(-10)) //10
+//Square root
+console.log(Math.sqrt(100)) // 10
+console.log(Math.sqrt(2)) //1.4142135623730951
+// Power
+console.log(Math.pow(3, 2)) // 9
+console.log(Math.E) // 2.718
+
+// Logarithm
+//Returns the natural logarithm of base E of x, Math.log(x)
+console.log(Math.log(2)) // 0.6931471805599453
+console.log(Math.log(10)) // 2.302585092994046
+
+// Trigonometry
+console.log(Math.sin(0))
+console.log(Math.sin(60))
+console.log(Math.cos(0))
+console.log(Math.cos(60))
diff --git a/ID/02_Day_Data_types/non_primitive_data_types.js b/ID/02_Day_Data_types/non_primitive_data_types.js
new file mode 100644
index 0000000..23d7fa2
--- /dev/null
+++ b/ID/02_Day_Data_types/non_primitive_data_types.js
@@ -0,0 +1,30 @@
+let nums = [1, 2, 3]
+nums[0] = 10
+console.log(nums) // [10, 2, 3]
+
+let nums = [1, 2, 3]
+let numbers = [1, 2, 3]
+console.log(nums == numbers) // false
+
+let userOne = {
+ name: 'Asabeneh',
+ role: 'teaching',
+ country: 'Finland'
+}
+let userTwo = {
+ name: 'Asabeneh',
+ role: 'teaching',
+ country: 'Finland'
+}
+console.log(userOne == userTwo) // false
+
+let numbers = nums
+console.log(nums == numbers) // true
+
+let userOne = {
+name:'Asabeneh',
+role:'teaching',
+country:'Finland'
+}
+let userTwo = userOne
+console.log(userOne == userTwo) // true
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/number_data_types.js b/ID/02_Day_Data_types/number_data_types.js
new file mode 100644
index 0000000..b850af9
--- /dev/null
+++ b/ID/02_Day_Data_types/number_data_types.js
@@ -0,0 +1,9 @@
+let age = 35
+const gravity = 9.81 //we use const for non-changing values, gravitational constant in m/s2
+let mass = 72 // mass in Kilogram
+const PI = 3.14 // pi a geometrical constant
+
+//More Examples
+const boilingPoint = 100 // temperature in oC, boiling point of water which is a constant
+const bodyTemp = 37 // oC average human body temperature, which is a constant
+console.log(age, gravity, mass, PI, boilingPoint, bodyTemp)
diff --git a/ID/02_Day_Data_types/primitive_data_types.js b/ID/02_Day_Data_types/primitive_data_types.js
new file mode 100644
index 0000000..d3c298c
--- /dev/null
+++ b/ID/02_Day_Data_types/primitive_data_types.js
@@ -0,0 +1,14 @@
+let word = 'JavaScript'
+// we dont' modify string
+// we don't do like this, word[0] = 'Y'
+let numOne = 3
+let numTwo = 3
+console.log(numOne == numTwo) // true
+
+let js = 'JavaScript'
+let py = 'Python'
+console.log(js == py) //false
+
+let lightOn = true
+let lightOff = false
+console.log(lightOn == lightOff) // false
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_concatenation.js b/ID/02_Day_Data_types/string_concatenation.js
new file mode 100644
index 0000000..516ca1a
--- /dev/null
+++ b/ID/02_Day_Data_types/string_concatenation.js
@@ -0,0 +1,19 @@
+// Declaring different variables of different data types
+let space = ' '
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
+// Concatenating using addition operator
+let fullName = firstName + space + lastName // concatenation, merging two string together.
+console.log(fullName)
+
+let personInfoOne = fullName + '. I am ' + age + '. I live in ' + country // ES5
+console.log(personInfoOne)
+// Concatenation: Template Literals(Template Strings)
+let personInfoTwo = `I am ${fullName}. I am ${age}. I live in ${country}.` //ES6 - String interpolation method
+let personInfoThree = `I am ${fullName}. I live in ${city}, ${country}. I am a ${job}. I teach ${language}.`
+console.log(personInfoTwo)
+console.log(personInfoThree)
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_data_types.js b/ID/02_Day_Data_types/string_data_types.js
new file mode 100644
index 0000000..fd61150
--- /dev/null
+++ b/ID/02_Day_Data_types/string_data_types.js
@@ -0,0 +1,7 @@
+let space = ' ' // an empty space string
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+let language = 'JavaScript'
+let job = 'teacher'
diff --git a/ID/02_Day_Data_types/string_methods/accessing_character.js b/ID/02_Day_Data_types/string_methods/accessing_character.js
new file mode 100644
index 0000000..32229fb
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/accessing_character.js
@@ -0,0 +1,12 @@
+// Let us access the first character in 'JavaScript' string.
+
+let string = 'JavaScript'
+let firstLetter = string[0]
+console.log(firstLetter) // J
+let secondLetter = string[1] // a
+let thirdLetter = string[2]
+let lastLetter = string[9]
+console.log(lastLetter) // t
+let lastIndex = string.length - 1
+console.log(lastIndex) // 9
+console.log(string[lastIndex]) // t
diff --git a/ID/02_Day_Data_types/string_methods/char_at.js b/ID/02_Day_Data_types/string_methods/char_at.js
new file mode 100644
index 0000000..7daaf74
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/char_at.js
@@ -0,0 +1,6 @@
+// charAt(): Takes index and it returns the value at that index
+string.charAt(index)
+let string = '30 Days Of JavaScript'
+console.log(string.charAt(0)) // 3
+let lastIndex = string.length - 1
+console.log(string.charAt(lastIndex)) // t
diff --git a/ID/02_Day_Data_types/string_methods/char_code_at.js b/ID/02_Day_Data_types/string_methods/char_code_at.js
new file mode 100644
index 0000000..e58baaa
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/char_code_at.js
@@ -0,0 +1,7 @@
+// charCodeAt(): Takes index and it returns char code(ASCII number) of the value at that index
+
+string.charCodeAt(index)
+let string = '30 Days Of JavaScript'
+console.log(string.charCodeAt(3)) // D ASCII number is 51
+let lastIndex = string.length - 1
+console.log(string.charCodeAt(lastIndex)) // t ASCII is 116
diff --git a/ID/02_Day_Data_types/string_methods/concat.js b/ID/02_Day_Data_types/string_methods/concat.js
new file mode 100644
index 0000000..8b8192a
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/concat.js
@@ -0,0 +1,6 @@
+// concat(): it takes many substrings and creates concatenation.
+// string.concat(substring, substring, substring)
+let string = '30'
+console.log(string.concat("Days", "Of", "JavaScript")) // 30DaysOfJavaScript
+let country = 'Fin'
+console.log(country.concat("land")) // Finland
diff --git a/ID/02_Day_Data_types/string_methods/ends_with.js b/ID/02_Day_Data_types/string_methods/ends_with.js
new file mode 100644
index 0000000..0ce5f1f
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/ends_with.js
@@ -0,0 +1,11 @@
+// endsWith: it takes a substring as an argument and it checks if the string starts with that specified substring. It returns a boolean(true or false).
+// string.endsWith(substring)
+let string = 'Love is the best to in this world'
+console.log(string.endsWith('world')) // true
+console.log(string.endsWith('love')) // false
+console.log(string.endsWith('in this world')) // true
+
+let country = 'Finland'
+console.log(country.endsWith('land')) // true
+console.log(country.endsWith('fin')) // false
+console.log(country.endsWith('Fin')) // false
diff --git a/ID/02_Day_Data_types/string_methods/includes.js b/ID/02_Day_Data_types/string_methods/includes.js
new file mode 100644
index 0000000..3fbe8e0
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/includes.js
@@ -0,0 +1,14 @@
+// includes(): It takes a substring argument and it check if substring argument exists in the string. includes() returns a boolean. It checks if a substring exist in a string and it returns true if it exists and false if it doesn't exist.
+let string = '30 Days Of JavaScript'
+console.log(string.includes('Days')) // true
+console.log(string.includes('days')) // false
+console.log(string.includes('Script')) // true
+console.log(string.includes('script')) // false
+console.log(string.includes('java')) // false
+console.log(string.includes('Java')) // true
+
+let country = 'Finland'
+console.log(country.includes('fin')) // false
+console.log(country.includes('Fin')) // true
+console.log(country.includes('land')) // true
+console.log(country.includes('Land')) // false
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/index_of.js b/ID/02_Day_Data_types/string_methods/index_of.js
new file mode 100644
index 0000000..480db7c
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/index_of.js
@@ -0,0 +1,11 @@
+// indexOf(): Takes takes a substring and if the substring exists in a string it returns the first position of the substring if does not exist it returns -1
+
+string.indexOf(substring)
+let string = '30 Days Of JavaScript'
+console.log(string.indexOf('D')) // 3
+console.log(string.indexOf('Days')) // 3
+console.log(string.indexOf('days')) // -1
+console.log(string.indexOf('a')) // 4
+console.log(string.indexOf('JavaScript')) // 11
+console.log(string.indexOf('Script')) //15
+console.log(string.indexOf('script')) // -1
diff --git a/ID/02_Day_Data_types/string_methods/last_index_of.js b/ID/02_Day_Data_types/string_methods/last_index_of.js
new file mode 100644
index 0000000..2134d22
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/last_index_of.js
@@ -0,0 +1,6 @@
+// lastIndexOf(): Takes takes a substring and if the substring exists in a string it returns the last position of the substring if it does not exist it returns -1
+
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+console.log(string.lastIndexOf('love')) // 67
+console.log(string.lastIndexOf('you')) // 63
+console.log(string.lastIndexOf('JavaScript')) // 38
diff --git a/ID/02_Day_Data_types/string_methods/length.js b/ID/02_Day_Data_types/string_methods/length.js
new file mode 100644
index 0000000..070476f
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/length.js
@@ -0,0 +1,6 @@
+// length: The string length method returns the number of characters in a string included empty space. Example:
+
+let js = 'JavaScript'
+console.log(js.length) // 10
+let firstName = 'Asabeneh'
+console.log(firstName.length) // 8
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/match.js b/ID/02_Day_Data_types/string_methods/match.js
new file mode 100644
index 0000000..54e18a8
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/match.js
@@ -0,0 +1,22 @@
+// match: it takes a substring or regular expression pattern as an argument and it returns an array if there is match if not it returns null. Let us see how a regular expression pattern looks like. It starts with / sign and ends with / sign.
+let string = 'love'
+let patternOne = /love/ // with out any flag
+let patternTwo = /love/gi // g-means to search in the whole text, i - case insensitive
+string.match(substring)
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+console.log(string.match('love')) //
+/*
+output
+
+["love", index: 2, input: "I love JavaScript. If you do not love JavaScript what else can you love.", groups: undefined]
+*/
+let pattern = /love/gi
+console.log(string.match(pattern)) // ["love", "love", "love"]
+// Let us extract numbers from text using regular expression. This is not regular expression section, no panic.
+
+let txt = 'In 2019, I run 30 Days of Pyhton. Now, in 2020 I super exited to start this challenge'
+let regEx = /\d/g // d with escape character means d not a normal d instead acts a digit
+// + means one or more digit numbers,
+// if there is g after that it means global, search everywhere.
+console.log(txt.match(regEx)) // ["2", "0", "1", "9", "3", "0", "2", "0", "2", "0"]
+console.log(txt.match(/\d+/g)) // ["2019", "30", "2020"]
diff --git a/ID/02_Day_Data_types/string_methods/repeat.js b/ID/02_Day_Data_types/string_methods/repeat.js
new file mode 100644
index 0000000..bf8e022
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/repeat.js
@@ -0,0 +1,4 @@
+// repeat(): it takes a number argument and it returned the repeated version of the string.
+// string.repeat(n)
+let string = 'love'
+console.log(string.repeat(10)) // lovelovelovelovelovelovelovelovelovelove
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/replace.js b/ID/02_Day_Data_types/string_methods/replace.js
new file mode 100644
index 0000000..33f324c
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/replace.js
@@ -0,0 +1,7 @@
+// replace(): takes to parameter the old substring and new substring.
+// string.replace(oldsubstring, newsubstring)
+
+let string = '30 Days Of JavaScript'
+console.log(string.replace('JavaScript', 'Python')) // 30 Days Of Python
+let country = 'Finland'
+console.log(country.replace('Fin', 'Noman')) // Nomanland
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/search.js b/ID/02_Day_Data_types/string_methods/search.js
new file mode 100644
index 0000000..e1ea82e
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/search.js
@@ -0,0 +1,4 @@
+// search: it takes a substring as an argument and it returns the index of the first match.
+// string.search(substring)
+let string = 'I love JavaScript. If you do not love JavaScript what else can you love.'
+console.log(string.search('love')) // 2
diff --git a/ID/02_Day_Data_types/string_methods/split.js b/ID/02_Day_Data_types/string_methods/split.js
new file mode 100644
index 0000000..6b0ce6e
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/split.js
@@ -0,0 +1,10 @@
+// split(): The split method splits a string at a specified place.
+let string = '30 Days Of JavaScipt'
+console.log(string.split()) // ["30 Days Of JavaScript"]
+console.log(string.split(' ')) // ["30", "Days", "Of", "JavaScript"]
+let firstName = 'Asabeneh'
+console.log(firstName.split()) // ["Asabeneh"]
+console.log(firstName.split('')) // ["A", "s", "a", "b", "e", "n", "e", "h"]
+let countries = 'Finland, Sweden, Norway, Denmark, and Iceland'
+console.log(countries.split(',')) // ["Finland", " Sweden", " Norway", " Denmark", " and Iceland"]
+console.log(countries.split(', ')) // ["Finland", "Sweden", "Norway", "Denmark", "and Iceland"]
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/starts_with.js b/ID/02_Day_Data_types/string_methods/starts_with.js
new file mode 100644
index 0000000..a89ee3b
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/starts_with.js
@@ -0,0 +1,11 @@
+// startsWith: it takes a substring as an argument and it checks if the string starts with that specified substring. It returns a boolean(true or false).
+// string.startsWith(substring)
+let string = 'Love is the best to in this world'
+console.log(string.startsWith('Love')) // true
+console.log(string.startsWith('love')) // false
+console.log(string.startsWith('world')) // false
+
+let country = 'Finland'
+console.log(country.startsWith('Fin')) // true
+console.log(country.startsWith('fin')) // false
+console.log(country.startsWith('land')) // false
diff --git a/ID/02_Day_Data_types/string_methods/substr.js b/ID/02_Day_Data_types/string_methods/substr.js
new file mode 100644
index 0000000..0bea56d
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/substr.js
@@ -0,0 +1,5 @@
+//substr(): It takes two arguments,the starting index and number of characters to slice.
+let string = 'JavaScript'
+console.log(string.substr(4,6)) // Script
+let country = 'Finland'
+console.log(country.substr(3, 4)) // land
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/substring.js b/ID/02_Day_Data_types/string_methods/substring.js
new file mode 100644
index 0000000..3fac3a1
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/substring.js
@@ -0,0 +1,9 @@
+// substring(): It takes two arguments,the starting index and the stopping index but it doesn't include the stopping index.
+let string = 'JavaScript'
+console.log(string.substring(0,4)) // Java
+console.log(string.substring(4,10)) // Script
+console.log(string.substring(4)) // Script
+let country = 'Finland'
+console.log(country.substring(0, 3)) // Fin
+console.log(country.substring(3, 7)) // land
+console.log(country.substring(3)) // land
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/to_lowercase.js b/ID/02_Day_Data_types/string_methods/to_lowercase.js
new file mode 100644
index 0000000..1a4ab53
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/to_lowercase.js
@@ -0,0 +1,7 @@
+// toLowerCase(): this method changes the string to lowercase letters.
+let string = 'JavasCript'
+console.log(string.toLowerCase()) // javascript
+let firstName = 'Asabeneh'
+console.log(firstName.toLowerCase()) // asabeneh
+let country = 'Finland'
+console.log(country.toLowerCase()) // finland
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/to_uppercase.js b/ID/02_Day_Data_types/string_methods/to_uppercase.js
new file mode 100644
index 0000000..112a6d0
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/to_uppercase.js
@@ -0,0 +1,8 @@
+// toUpperCase(): this method changes the string to uppercase letters.
+
+let string = 'JavaScript'
+console.log(string.toUpperCase()) // JAVASCRIPT
+let firstName = 'Asabeneh'
+console.log(firstName.toUpperCase()) // ASABENEH
+let country = 'Finland'
+console.log(country.toUpperCase()) // FINLAND
\ No newline at end of file
diff --git a/ID/02_Day_Data_types/string_methods/trim.js b/ID/02_Day_Data_types/string_methods/trim.js
new file mode 100644
index 0000000..16785c4
--- /dev/null
+++ b/ID/02_Day_Data_types/string_methods/trim.js
@@ -0,0 +1,7 @@
+//trim(): Removes trailing space in the beginning or the end of a string.
+let string = ' 30 Days Of JavaScript '
+console.log(string) //
+console.log(string.trim(' ')) //
+let firstName = ' Asabeneh '
+console.log(firstName)
+console.log(firstName.trim()) //
\ No newline at end of file
diff --git a/ID/03_Day_Booleans_operators_date/03_booleans_operators_date.md b/ID/03_Day_Booleans_operators_date/03_booleans_operators_date.md
new file mode 100644
index 0000000..1b5298e
--- /dev/null
+++ b/ID/03_Day_Booleans_operators_date/03_booleans_operators_date.md
@@ -0,0 +1,633 @@
+
+
+[<< Day 2](../02_Day_Data_types/02_day_data_types.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
+
+
+
+- [📔 Day 3](#-day-3)
+ - [Booleans](#booleans)
+ - [Truthy values](#truthy-values)
+ - [Falsy values](#falsy-values)
+ - [Undefined](#undefined)
+ - [Null](#null)
+ - [Operators](#operators)
+ - [Assignment operators](#assignment-operators)
+ - [Arithmetic Operators](#arithmetic-operators)
+ - [Comparison Operators](#comparison-operators)
+ - [Logical Operators](#logical-operators)
+ - [Increment Operator](#increment-operator)
+ - [Decrement Operator](#decrement-operator)
+ - [Ternary Operators](#ternary-operators)
+ - [Operator Precendence](#operator-precendence)
+ - [Window Methods](#window-methods)
+ - [Window alert() method](#window-alert-method)
+ - [Window prompt() method](#window-prompt-method)
+ - [Window confirm() method](#window-confirm-method)
+ - [Date Object](#date-object)
+ - [Creating a time object](#creating-a-time-object)
+ - [Getting full year](#getting-full-year)
+ - [Getting month](#getting-month)
+ - [Getting date](#getting-date)
+ - [Getting day](#getting-day)
+ - [Getting hours](#getting-hours)
+ - [Getting minutes](#getting-minutes)
+ - [Getting seconds](#getting-seconds)
+ - [Getting time](#getting-time)
+ - [💻 Day 3: Exercises](#-day-3-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 3
+
+## Booleans
+
+A boolean data type represents one of the two values:_true_ or _false_. Boolean value is either true or false. The use of these data types will be clear when you start the comparison operator. Any comparisons return a boolean value which is either true or false.
+
+**Example: Boolean Values**
+
+```js
+let isLightOn = true
+let isRaining = false
+let isHungry = false
+let isMarried = true
+let truValue = 4 > 3 // true
+let falseValue = 4 < 3 // false
+```
+
+We agreed that boolean values are either true or false.
+
+### Truthy values
+
+- All numbers(positive and negative) are truthy except zero
+- All strings are truthy
+- The boolean true
+
+### Falsy values
+
+- 0
+- 0n
+- null
+- undefined
+- NaN
+- the boolean false
+- '', "", ``, empty string
+
+It is good to remember those truthy values and falsy values. In later section, we will use them with conditions to make decisions.
+
+## Undefined
+
+If we declare a variable and if we do not assign a value, the value will be undefined. In addition to this, if a function is not returning the value, it will be undefined.
+
+```js
+let firstName
+console.log(firstName) //not defined, because it is not assigned to a value yet
+```
+
+## Null
+
+```js
+let empty = null
+console.log(empty) // -> null , means no value
+```
+
+## Operators
+
+### Assignment operators
+
+An equal sign in JavaScript is an assignment operator. It uses to assign a variable.
+
+```js
+let firstName = 'Asabeneh'
+let country = 'Finland'
+```
+
+Assignment Operators
+
+
+
+### Arithmetic Operators
+
+Arithmetic operators are mathematical operators.
+
+- Addition(+): a + b
+- Subtraction(-): a - b
+- Multiplication(*): a * b
+- Division(/): a / b
+- Modulus(%): a % b
+- Exponential(**): a ** b
+
+```js
+let numOne = 4
+let numTwo = 3
+let sum = numOne + numTwo
+let diff = numOne - numTwo
+let mult = numOne * numTwo
+let div = numOne / numTwo
+let remainder = numOne % numTwo
+let powerOf = numOne ** numTwo
+
+console.log(sum, diff, mult, div, remainder, powerOf) // 7,1,12,1.33,1, 64
+
+```
+
+```js
+const PI = 3.14
+let radius = 100 // length in meter
+
+//Let us calculate area of a circle
+const areaOfCircle = PI * radius * radius
+console.log(areaOfCircle) // 314 m
+
+
+const gravity = 9.81 // in m/s2
+let mass = 72 // in Kilogram
+
+// Let us calculate weight of an object
+const weight = mass * gravity
+console.log(weight) // 706.32 N(Newton)
+
+const boilingPoint = 100 // temperature in oC, boiling point of water
+const bodyTemp = 37 // body temperature in oC
+
+
+// Concatenating string with numbers using string interpolation
+/*
+ The boiling point of water is 100 oC.
+ Human body temperature is 37 oC.
+ The gravity of earth is 9.81 m/s2.
+ */
+console.log(
+ `The boiling point of water is ${boilingPoint} oC.\nHuman body temperature is ${bodyTemp} oC.\nThe gravity of earth is ${gravity} m / s2.`
+)
+```
+
+### Comparison Operators
+
+In programming we compare values, we use comparison operators to compare two values. We check if a value is greater or less or equal to other value.
+
+
+**Example: Comparison Operators**
+
+```js
+console.log(3 > 2) // true, because 3 is greater than 2
+console.log(3 >= 2) // true, because 3 is greater than 2
+console.log(3 < 2) // false, because 3 is greater than 2
+console.log(2 < 3) // true, because 2 is less than 3
+console.log(2 <= 3) // true, because 2 is less than 3
+console.log(3 == 2) // false, because 3 is not equal to 2
+console.log(3 != 2) // true, because 3 is not equal to 2
+console.log(3 == '3') // true, compare only value
+console.log(3 === '3') // false, compare both value and data type
+console.log(3 !== '3') // true, compare both value and data type
+console.log(3 != 3) // false, compare only value
+console.log(3 !== 3) // false, compare both value and data type
+console.log(0 == false) // true, equivalent
+console.log(0 === false) // false, not exactly the same
+console.log(0 == '') // true, equivalent
+console.log(0 == ' ') // true, equivalent
+console.log(0 === '') // false, not exactly the same
+console.log(1 == true) // true, equivalent
+console.log(1 === true) // false, not exactly the same
+console.log(undefined == null) // true
+console.log(undefined === null) // false
+console.log(NaN == NaN) // false, not equal
+console.log(NaN === NaN) // false
+console.log(typeof NaN) // number
+
+console.log('mango'.length == 'avocado'.length) // false
+console.log('mango'.length != 'avocado'.length) // true
+console.log('mango'.length < 'avocado'.length) // true
+console.log('milk'.length == 'meat'.length) // true
+console.log('milk'.length != 'meat'.length) // false
+console.log('tomato'.length == 'potato'.length) // true
+console.log('python'.length > 'dragon'.length) // false
+```
+
+Try to understand the above comparisons with some logic. Remembering without any logic might be difficult.
+JavaScript is some how a wired kind of programming language. JavaScript code run and give you a result but unless you are good at it may not be the desired result.
+
+As rule of thumb, if a value is not true with == it will not be equal with ===. Using === is safer than using ==. The following [link](https://dorey.github.io/JavaScript-Equality-Table/) has an exhaustive list of comparison of data types.
+
+### Logical Operators
+
+The following symbols are the common logical operators:
+&&(ampersand) , ||(pipe) and !(negation).
+The && operator gets true only if the two operands are true.
+The || operator gets true either of the operand is true.
+The ! operator negates true to false and false to true.
+
+```js
+// && ampersand operator example
+
+const check = 4 > 3 && 10 > 5 // true && true -> true
+const check = 4 > 3 && 10 < 5 // true && false -> false
+const check = 4 < 3 && 10 < 5 // false && false -> false
+
+// || pipe or operator, example
+
+const check = 4 > 3 || 10 > 5 // true || true -> true
+const check = 4 > 3 || 10 < 5 // true || false -> true
+const check = 4 < 3 || 10 < 5 // false || false -> false
+
+//! Negation examples
+
+let check = 4 > 3 // true
+let check = !(4 > 3) // false
+let isLightOn = true
+let isLightOff = !isLightOn // false
+let isMarried = !false // true
+```
+
+### Increment Operator
+
+In JavaScrip we use the increment operator to increase a value stored in a variable. The increment could be pre or post increment. Let us see each of them:
+
+1. Pre-increment
+
+```js
+let count = 0
+console.log(++count) // 1
+console.log(count) // 1
+```
+
+1. Post-increment
+
+```js
+let count = 0
+console.log(count++) // 0
+console.log(count) // 1
+```
+
+We use most of the time post-increment. At least you should remember how to use post-increment operator.
+
+### Decrement Operator
+
+In JavaScrip we use the decrement operator to decrease a value stored in a variable. The decrement could be pre or post decrement. Let us see each of them:
+
+1. Pre-decrement
+
+```js
+let count = 0
+console.log(--count) // -1
+console.log(count) // -1
+```
+
+2. Post-decrement
+
+```js
+let count = 0
+console.log(count--) // 0
+console.log(count) // -1
+```
+
+### Ternary Operators
+
+Ternary operator allows to write a condition.
+Another way to write conditionals is using ternary operators. Look at the following examples:
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+isRaining = false
+
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+```sh
+You need a rain coat.
+No need for a rain coat.
+```
+
+```js
+let number = 5
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+number = -5
+
+number > 0
+ ? console.log(`${number} is a positive number`)
+ : console.log(`${number} is a negative number`)
+```
+
+```sh
+5 is a positive number
+-5 is a negative number
+```
+
+### Operator Precendence
+
+I would like to recommend you to read about operator precendence from this [link](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence)
+
+## Window Methods
+
+### Window alert() method
+
+As you have seen at very beginning alert() method displays an alert box with a specified message and an OK button. It is a builtin method and it takes on argument.
+
+```js
+alert(message)
+```
+
+```js
+alert('Welcome to 30DaysOfJavaScript')
+```
+
+Do not use too much alert because it is destructing and annoying, use it just to test.
+
+### Window prompt() method
+
+The window prompt methods display a prompt box with an input on your browser to take input values and the input data can be stored in a variable. The prompt() method takes two arguments. The second argument is optional.
+
+```js
+prompt('required text', 'optional text')
+```
+
+```js
+let number = prompt('Enter number', 'number goes here')
+console.log(number)
+```
+
+### Window confirm() method
+
+The confirm() method displays a dialog box with a specified message, along with an OK and a Cancel button.
+A confirm box is often used to ask permission from a user to execute something. Window confirm() takes a string as an argument.
+Clicking the OK yields true value, whereas clicking the Cancel button yields false value.
+
+```js
+const agree = confirm('Are you sure you like to delete? ')
+console.log(agree) // result will be true or false based on what you click on the dialog box
+```
+
+These are not all the window methods we will have a separate section to go deep into window methods.
+
+## Date Object
+
+Time is an important thing. We like to know the time a certain activity or event. In JavaScript current time and date is created using JavaScript Date Object. The object we create using Date object provides many methods to work with date and time.The methods we use to get date and time information from a date object values are started with a word _get_ because it provide the information.
+_getFullYear(), getMonths(), getDate(), getDay(), getHours(), getMinutes, getSeconds(), getMilliseconds(), getTime(), getDay()_
+
+
+
+### Creating a time object
+
+Once we create time object. The time object will provide information about time. Let us create a time object
+
+```js
+const now = new Date()
+console.log(now) // Sat Jan 04 2020 00:56:41 GMT+0200 (Eastern European Standard Time)
+```
+
+We have created a time object and we can access any date time information from the object using the get methods we have mentioned on the table.
+
+### Getting full year
+
+Let's extract or get the full year from a time object.
+
+```js
+const now = new Date()
+console.log(now.getFullYear()) // 2020
+```
+
+### Getting month
+
+Let's extract or get the month from a time object.
+
+```js
+const now = new Date()
+console.log(now.getMonth()) // 0, because the month is January, month(0-11)
+```
+
+### Getting date
+
+Let's extract or get the date of the month from a time object.
+
+```js
+const now = new Date()
+console.log(now.getDate()) // 4, because the day of the month is 4th, day(1-31)
+```
+
+### Getting day
+
+Let's extract or get the day of the week from a time object.
+
+```js
+const now = new Date()
+console.log(now.getDay()) // 6, because the day is Saturday which is the 7th day
+// Sunday is 0, Monday is 1 and Saturday is 6
+// Getting the weekday as a number (0-6)
+```
+
+### Getting hours
+
+Let's extract or get the hours from a time object.
+
+```js
+const now = new Date()
+console.log(now.getHours()) // 0, because the time is 00:56:41
+```
+
+### Getting minutes
+
+Let's extract or get the minutes from a time object.
+
+```js
+const now = new Date()
+console.log(now.getMinutes()) // 56, because the time is 00:56:41
+```
+
+### Getting seconds
+
+Let's extract or get the seconds from a time object.
+
+```js
+const now = new Date()
+console.log(now.getSeconds()) // 41, because the time is 00:56:41
+```
+
+### Getting time
+
+This method give time in milliseconds starting from January 1, 1970. It is also know as Unix time. We can get the unix time in two ways:
+
+1. Using _getTime()_
+
+```js
+const now = new Date() //
+console.log(now.getTime()) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+```
+
+1. Using _Date.now()_
+
+```js
+const allSeconds = Date.now() //
+console.log(allSeconds) // 1578092201341, this is the number of seconds passed from January 1, 1970 to January 4, 2020 00:56:41
+
+const timeInSeconds = new Date().getTime()
+console.log(allSeconds == timeInSeconds) // true
+```
+
+Let us format these values to a human readable time format.
+**Example:**
+
+```js
+const now = new Date()
+const year = now.getFullYear() // return year
+const month = now.getMonth() + 1 // return month(0 - 11)
+const date = now.getDate() // return date (1 - 31)
+const hours = now.getHours() // return number (0 - 23)
+const minutes = now.getMinutes() // return number (0 -59)
+
+console.log(`${date}/${month}/${year} ${hours}:${minutes}`) // 4/1/2020 0:56
+```
+
+🌕 You have boundless energy. You have just completed day 3 challenges and you are three steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Day 3: Exercises
+
+### Exercises: Level 1
+
+1. Declare firstName, lastName, country, city, age, isMarried, year variable and assign value to it and use the typeof operator to check different data types.
+2. Check if type of '10' is equal to 10
+3. Check if parseInt('9.8') is equal to 10
+4. Boolean value is either true or false.
+ 1. Write three JavaScript statement which provide truthy value.
+ 2. Write three JavaScript statement which provide falsy value.
+
+5. Figure out the result of the following comparison expression first without using console.log(). After you decide the result confirm it using console.log()
+ 1. 4 > 3
+ 2. 4 >= 3
+ 3. 4 < 3
+ 4. 4 <= 3
+ 5. 4 == 4
+ 6. 4 === 4
+ 7. 4 != 4
+ 8. 4 !== 4
+ 9. 4 != '4'
+ 10. 4 == '4'
+ 11. 4 === '4'
+ 12. Find the length of python and jargon and make a falsy comparison statement.
+
+6. Figure out the result of the following expressions first without using console.log(). After you decide the result confirm it by using console.log()
+ 1. 4 > 3 && 10 < 12
+ 2. 4 > 3 && 10 > 12
+ 3. 4 > 3 || 10 < 12
+ 4. 4 > 3 || 10 > 12
+ 5. !(4 > 3)
+ 6. !(4 < 3)
+ 7. !(false)
+ 8. !(4 > 3 && 10 < 12)
+ 9. !(4 > 3 && 10 > 12)
+ 10. !(4 === '4')
+ 11. There is no 'on' in both dragon and python
+
+7. Use the Date object to do the following activities
+ 1. What is the year today?
+ 2. What is the month today as a number?
+ 3. What is the date today?
+ 4. What is the day today as a number?
+ 5. What is the hours now?
+ 6. What is the minutes now?
+ 7. Find out the numbers of seconds elapsed from January 1, 1970 to now.
+
+### Exercises: Level 2
+
+1. Write a script that prompt the user to enter base and height of the triangle and calculate an area of a triangle (area = 0.5 x b x h).
+
+ ```sh
+ Enter base: 20
+ Enter height: 10
+ The area of the triangle is 50
+ ```
+
+1. Write a script that prompt the user to enter side a, side b, and side c of the triangle and and calculate the perimeter of triangle (perimeter = a + b + c)
+
+ ```sh
+ Enter side a: 5
+ Enter side b: 4
+ Enter side c: 3
+ The perimeter of the triangle is 12
+ ```
+
+1. Get length and width using prompt and calculate an area of rectangle (area = length x width and the perimeter of rectangle (perimeter = 2 x (length + width))
+1. Get radius using prompt and calculate the area of a circle (area = pi x r x r) and circumference of a circle(c = 2 x pi x r) where pi = 3.14.
+1. Calculate the slope, x-intercept and y-intercept of y = 2x -2
+1. Slope is (m = y2-y1/x2-x1). Find the slope between point (2, 2) and point(6,10)
+1. Compare the slope of above two questions.
+1. Calculate the value of y (y = x^2 + 6x + 9). Try to use different x values and figure out at what x value y is 0.
+1. Writ a script that prompt a user to enter hours and rate per hour. Calculate pay of the person?
+
+ ```sh
+ Enter hours: 40
+ Enter rate per hour: 28
+ Your weekly earning is 1120
+ ```
+
+1. If the length of your name is greater than 7 say, your name is long else say your name is short.
+1. Compare your first name length and your family name length and you should get this output.
+
+ ```js
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ ```
+
+ ```sh
+ Your first name, Asabeneh is longer than your family name, Yetayeh
+ ```
+
+1. Declare two variables _myAge_ and _yourAge_ and assign them initial values and myAge and yourAge.
+
+ ```js
+ let myAge = 250
+ let yourAge = 25
+ ```
+
+ ```sh
+ I am 225 years older than you.
+ ```
+
+1. Using prompt get the year the user was born and if the user is 18 or above allow the user to drive if not tell the user to wait a certain amount of years.
+
+ ```sh
+
+ Enter birth year: 1995
+ You are 25. You are old enough to drive
+
+ Enter birth year: 2005
+ You are 15. You will be allowed to drive after 3 years.
+ ```
+
+1. Write a script that prompt the user to enter number of years. Calculate the number of seconds a person can live. Assume some one lives just hundred years
+
+ ```sh
+ Enter number of yours you live: 100
+ You lived 3153600000 seconds.
+ ```
+
+1. Create a human readable time format using the Date time object
+ 1. YYYY-MM-DD HH:mm
+ 2. DD-MM-YYYY HH:mm
+ 3. DD/MM/YYYY HH:mm
+
+### Exercises: Level 3
+
+1. Create a human readable time format using the Date time object. The hour and the minute should be all the time two digits(7 hours should be 07 and 5 minutes should be 05 )
+ 1. YYY-MM-DD HH:mm eg. 20120-01-02 07:05
+
+[<< Day 2](../02_Day_Data_types/02_day_data_types.md) | [Day 4 >>](../04_Day_Conditionals/04_day_conditionals.md)
diff --git a/ID/03_Day_Booleans_operators_date/03_day_starter/index.html b/ID/03_Day_Booleans_operators_date/03_day_starter/index.html
new file mode 100644
index 0000000..3db517d
--- /dev/null
+++ b/ID/03_Day_Booleans_operators_date/03_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript: 03 Day
+
+
+
+
30DaysOfJavaScript:03 Day
+
Booleans, undefined, null, date object
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/03_Day_Booleans_operators_date/03_day_starter/scripts/main.js b/ID/03_Day_Booleans_operators_date/03_day_starter/scripts/main.js
new file mode 100644
index 0000000..7762908
--- /dev/null
+++ b/ID/03_Day_Booleans_operators_date/03_day_starter/scripts/main.js
@@ -0,0 +1 @@
+// this is your main.js script
\ No newline at end of file
diff --git a/ID/04_Day_Conditionals/04_day_conditionals.md b/ID/04_Day_Conditionals/04_day_conditionals.md
new file mode 100644
index 0000000..b2a935a
--- /dev/null
+++ b/ID/04_Day_Conditionals/04_day_conditionals.md
@@ -0,0 +1,376 @@
+
+
+[<< Day 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Day 5 >>](../05_Day_Arrays/05_day_arrays.md)
+
+
+
+- [📔 Day 4](#-day-4)
+ - [Conditionals](#conditionals)
+ - [If](#if)
+ - [If Else](#if-else)
+ - [If Else if Else](#if-else-if-else)
+ - [Switch](#switch)
+ - [Ternary Operators](#ternary-operators)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 4
+
+## Conditionals
+
+Conditional statements are used for make decisions based on different conditions.
+By default , statements in JavaScript script executed sequentially from top to bottom. If the processing logic require so, the sequential flow of execution can be altered in two ways:
+
+- Conditional execution: a block of one or more statements will be executed if a certain expression is true
+- Repetitive execution: a block of one or more statements will be repetitively executed as long as a certain expression is true. In this section, we will cover _if_, _else_ , _else if_ statements. The comparison and logical operators we learned in the previous sections will be useful in here.
+
+Conditions can be implementing using the following ways:
+
+- if
+- if else
+- if else if else
+- switch
+- ternary operator
+
+### If
+
+In JavaScript and other programming languages the key word _if_ is to used check if a condition is true and to execute the block code. To create an if condition, we need _if_ keyword, condition inside a parenthesis and block of code inside a curly bracket({}).
+
+```js
+// syntax
+if (condition) {
+ //this part of code runs for truthy condition
+}
+```
+
+**Example:**
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+}
+// 3 is a positive number
+```
+
+As you can see in the condition example above, 3 is greater than 0, so it is a positive number. The condition was true and the block of code was executed. However, if the condition is false, we won't see any results.
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('Remember to take your rain coat.')
+}
+```
+
+ The same goes for the second condition, if isRaining is false the if block will not be executed and we do not see any output. In order to see the result of a falsy condition, we should have another block, which is going to be _else_.
+
+### If Else
+
+If condition is true the first block will be executed, if not the else condition will be executed.
+
+```js
+// syntax
+if (condition) {
+ // this part of code runs for truthy condition
+} else {
+ // this part of code runs for false condition
+}
+```
+
+```js
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 is a positive number
+
+num = -3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// -3 is a negative number
+```
+
+```js
+let isRaining = true
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// You need a rain coat.
+
+isRaining = false
+if (isRaining) {
+ console.log('You need a rain coat.')
+} else {
+ console.log('No need for a rain coat.')
+}
+// No need for a rain coat.
+```
+
+The last condition is false, therefore the else block was executed. What if we have more than two conditions? In that case, we would use *else if* conditions.
+
+### If Else if Else
+
+On our daily life, we make decisions on daily basis. We make decisions not by checking one or two conditions instead we make decisions based on multiple conditions. As similar to our daily life, programming is also full of conditions. We use *else if* when we have multiple conditions.
+
+```js
+// syntax
+if (condition) {
+ // code
+} else if (condition) {
+ // code
+} else {
+ // code
+
+}
+```
+
+**Example:**
+
+```js
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+```
+
+```js
+// if else if else
+let weather = 'sunny'
+if (weather === 'rainy') {
+ console.log('You need a rain coat.')
+} else if (weather === 'cloudy') {
+ console.log('It might be cold, you need a jacket.')
+} else if (weather === 'sunny') {
+ console.log('Go out freely.')
+} else {
+ console.log('No need for rain coat.')
+}
+```
+
+### Switch
+
+Switch is an alternative for **if else if else else**.
+The switch statement starts with a *switch* keyword followed by a parenthesis and code block. Inside the code block we will have different cases. Case block runs if the value in the switch statement parenthesis matches with the case value. The break statement is to terminate execution so the code execution does not go down after the condition is satisfied. The default block runs if all the cases don't satisfy the condition.
+
+```js
+switch(caseValue){
+ case 1:
+ // code
+ break
+ case 2:
+ // code
+ break
+ case 3:
+ // code
+ default:
+ // code
+}
+```
+
+```js
+let weather = 'cloudy'
+switch (weather) {
+ case 'rainy':
+ console.log('You need a rain coat.')
+ break
+ case 'cloudy':
+ console.log('It might be cold, you need a jacket.')
+ break
+ case 'sunny':
+ console.log('Go out freely.')
+ break
+ default:
+ console.log(' No need for rain coat.')
+}
+
+// Switch More Examples
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+
+```
+
+// Examples to use conditions in the cases
+
+```js
+let num = prompt('Enter number');
+switch (true) {
+ case num > 0:
+ console.log('Number is positive');
+ break;
+ case num == 0:
+ console.log('Numbers is zero');
+ break;
+ case num < 0:
+ console.log('Number is negative');
+ break;
+ default:
+ console.log('Entered value was not a number');
+}
+```
+
+### Ternary Operators
+
+Another way to write conditionals is using ternary operators. We have covered this in other sections, but we should also mention it here.
+
+```js
+let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+```
+
+🌕 You are extraordinary and you have a remarkable potential. You have just completed day 4 challenges and you are four steps ahead to your way to greatness. Now do some exercises for your brain and muscle.
+
+## 💻 Exercises
+
+### Exercises: Level 1
+
+1. Get user input using prompt(“Enter your age:”). If user is 18 or older , give feedback:'You are old enough to drive' but if not 18 give another feedback stating to wait for the number of years he neds to turn 18.
+
+ ```sh
+ Enter your age: 30
+ You are old enough to drive.
+
+ Enter your age:15
+ You are left with 3 years to drive.
+ ```
+
+1. Compare the values of myAge and yourAge using if … else. Based on the comparison and log the result to console stating who is older (me or you). Use prompt(“Enter your age:”) to get the age as input.
+
+ ```sh
+ Enter your age: 30
+ You are 5 years older than me.
+ ```
+
+1. If a is greater than b return 'a is greater than b' else 'a is less than b'. Try to implement it in to ways
+
+ - using if else
+ - ternary operator.
+
+ ```js
+ let a = 4
+ let b = 3
+ ```
+
+ ```sh
+ 4 is greater than 3
+ ```
+
+1. Even numbers are divisible by 2 and the remainder is zero. How do you check, if a number is even or not using JavaScript?
+
+ ```sh
+ Enter a number: 2
+ 2 is an even number
+
+ Enter a number: 9
+ 9 is is an odd number.
+ ```
+
+### Exercises: Level 2
+
+1. Write a code which can give grades to students according to theirs scores:
+ - 80-100, A
+ - 70-89, B
+ - 60-69, C
+ - 50-59, D
+ - 0-49, F
+1. Check if the season is Autumn, Winter, Spring or Summer.
+ If the user input is :
+ - September, October or November, the season is Autumn.
+ - December, January or February, the season is Winter.
+ - March, April or May, the season is Spring
+ - June, July or August, the season is Summer
+1. Check if a day is weekend day or a working day. Your script will take day as an input.
+
+```sh
+ What is the day today? Saturday
+ Saturday is a weekend.
+
+ What is the day today? saturDaY
+ Saturday is a weekend.
+
+ What is the day today? Friday
+ Friday is a working day.
+
+ What is the day today? FrIDAy
+ Friday is a working day.
+ ```
+
+### Exercises: Level 3
+
+1. Write a program which tells the number of days in a month.
+
+ ```sh
+ Enter a month: January
+ January has 31 days.
+
+ Enter a month: JANUARY
+ January has 31 day
+
+ Enter a month: February
+ February has 28 days.
+
+ Enter a month: FEbruary
+ February has 28 days.
+ ```
+
+1. Write a program which tells the number of days in a month, now consider leap year.
+
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 3](../03_Day_Booleans_operators_date/03_booleans_operators_date.md) | [Day 5 >>](../05_Day_Arrays/05_day_arrays.md)
diff --git a/ID/04_Day_Conditionals/04_day_starter/index.html b/ID/04_Day_Conditionals/04_day_starter/index.html
new file mode 100644
index 0000000..30d37fc
--- /dev/null
+++ b/ID/04_Day_Conditionals/04_day_starter/index.html
@@ -0,0 +1,15 @@
+
+
+
+
+ 30DaysOfJavaScript
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/04_Day_Conditionals/04_day_starter/scripts/main.js b/ID/04_Day_Conditionals/04_day_starter/scripts/main.js
new file mode 100644
index 0000000..ad0c1eb
--- /dev/null
+++ b/ID/04_Day_Conditionals/04_day_starter/scripts/main.js
@@ -0,0 +1,3 @@
+// this is your main.js script
+
+alert('Open the browser console whenever you work on JavaScript')
\ No newline at end of file
diff --git a/ID/05_Day_Arrays/05_day_arrays.md b/ID/05_Day_Arrays/05_day_arrays.md
new file mode 100644
index 0000000..3374c12
--- /dev/null
+++ b/ID/05_Day_Arrays/05_day_arrays.md
@@ -0,0 +1,779 @@
+
+
+[<< Day 4](../04_Day_Conditionals/04_day_Conditionals.md) | [Day 6 >>](../06_Day_Loops/06_day_loops.md)
+
+
+
+- [📔 Day 5](#-day-5)
+ - [Arrays](#arrays)
+ - [How to create an empty array](#how-to-create-an-empty-array)
+ - [How to create an array with values](#how-to-create-an-array-with-values)
+ - [Creating an array using split](#creating-an-array-using-split)
+ - [Accessing array items using index](#accessing-array-items-using-index)
+ - [Modifying array element](#modifying-array-element)
+ - [Methods to manipulate array](#methods-to-manipulate-array)
+ - [Array Constructor](#array-constructor)
+ - [Creating static values with fill](#creating-static-values-with-fill)
+ - [Concatenating array using concat](#concatenating-array-using-concat)
+ - [Getting array length](#getting-array-length)
+ - [Getting index an element in arr array](#getting-index-an-element-in-arr-array)
+ - [Getting last index of an element in array](#getting-last-index-of-an-element-in-array)
+ - [Checking array](#checking-array)
+ - [Converting array to string](#converting-array-to-string)
+ - [Joining array elements](#joining-array-elements)
+ - [Slice array elements](#slice-array-elements)
+ - [Splice method in array](#splice-method-in-array)
+ - [Adding item to an array using push](#adding-item-to-an-array-using-push)
+ - [Removing the end element using pop](#removing-the-end-element-using-pop)
+ - [Removing an element from the beginning](#removing-an-element-from-the-beginning)
+ - [Add an element from the beginning](#add-an-element-from-the-beginning)
+ - [Reversing array order](#reversing-array-order)
+ - [Sorting elements in array](#sorting-elements-in-array)
+ - [Array of arrays](#array-of-arrays)
+ - [💻 Exercise](#-exercise)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercise: Level 3](#exercise-level-3)
+
+# 📔 Day 5
+
+## Arrays
+
+In contrast to variables, an array can store _multiple values_. Each value in an array has an _index_, and each index has _a reference in a memory address_. Each value can be accessed by using their _indexes_. The index of an array starts from _zero_, and the index of the last element is less by one from the length of the array.
+
+An array is a collection of different data types which are ordered and changeable(modifiable). An array allows storing duplicate elements and different data types. An array can be empty, or it may have different data type values.
+
+### How to create an empty array
+
+In JavaScript, we can create an array in different ways. Let us see different ways to create an array.
+It is very common to use *const* instead of *let* to declare an array variable. If you ar using const it means you do not use that variable name again.
+
+- Using Array constructor
+
+```js
+// syntax
+const arr = Array()
+// or
+// let arr = new Array()
+console.log(arr) // []
+```
+
+- Using square brackets([])
+
+```js
+// syntax
+// This the most recommended way to create an empty list
+const arr = []
+console.log(arr)
+```
+
+### How to create an array with values
+
+Array with initial values. We use _length_ property to find the length of an array.
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100] // array of numbers
+const fruits = ['banana', 'orange', 'mango', 'lemon'] // array of strings, fruits
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] // array of strings, vegetables
+const animalProducts = ['milk', 'meat', 'butter', 'yoghurt'] // array of strings, products
+const webTechs = ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB'] // array of web technologies
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland'] // array of strings, countries
+
+// Print the array and its length
+
+console.log('Numbers:', numbers)
+console.log('Number of numbers:', numbers.length)
+
+console.log('Fruits:', fruits)
+console.log('Number of fruits:', fruits.length)
+
+console.log('Vegetables:', vegetables)
+console.log('Number of vegetables:', vegetables.length)
+
+console.log('Animal products:', animalProducts)
+console.log('Number of animal products:', animalProducts.length)
+
+console.log('Web technologies:', webTechs)
+console.log('Number of web technologies:', webTechs.length)
+
+console.log('Countries:', countries)
+console.log('Number of countries:', countries.length)
+```
+
+```sh
+Numbers: [0, 3.14, 9.81, 37, 98.6, 100]
+Number of numbers: 6
+Fruits: ['banana', 'orange', 'mango', 'lemon']
+Number of fruits: 4
+Vegetables: ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+Number of vegetables: 5
+Animal products: ['milk', 'meat', 'butter', 'yoghurt']
+Number of animal products: 4
+Web technologies: ['HTML', 'CSS', 'JS', 'React', 'Redux', 'Node', 'MongDB']
+Number of web technologies: 7
+Countries: ['Finland', 'Estonia', 'Denmark', 'Sweden', 'Norway']
+Number of countries: 5
+```
+
+- Array can have items of different data types
+
+```js
+const arr = [
+ 'Asabeneh',
+ 250,
+ true,
+ { country: 'Finland', city: 'Helsinki' },
+ { skills: ['HTML', 'CSS', 'JS', 'React', 'Python'] }
+] // arr containing different data types
+console.log(arr)
+```
+
+### Creating an array using split
+
+As we have seen in the earlier section, we can split a string at different positions, and we can change to an array. Let us see the examples below.
+
+```js
+let js = 'JavaScript'
+const charsInJavaScript = js.split('')
+
+console.log(charsInJavaScript) // ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]
+
+let companiesString = 'Facebook, Google, Microsoft, Apple, IBM, Oracle, Amazon'
+const companies = companiesString.split(',')
+
+console.log(companies) // ["Facebook", " Google", " Microsoft", " Apple", " IBM", " Oracle", " Amazon"]
+let txt =
+ 'I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.'
+const words = txt.split(' ')
+
+console.log(words)
+// the text has special characters think how you can just get only the words
+// ["I", "love", "teaching", "and", "empowering", "people.", "I", "teach", "HTML,", "CSS,", "JS,", "React,", "Python"]
+```
+
+### Accessing array items using index
+
+We access each element in an array using their index. An array index starts from 0. The picture below clearly shows the index of each element in the array.
+
+
+
+```js
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+let firstFruit = fruits[0] // we are accessing the first item using its index
+
+console.log(firstFruit) // banana
+
+secondFruit = fruits[1]
+console.log(secondFruit) // orange
+
+let lastFruit = fruits[3]
+console.log(lastFruit) // lemon
+// Last index can be calculated as follows
+
+let lastIndex = fruits.length - 1
+lastFruit = fruits[lastIndex]
+
+console.log(lastFruit) // lemon
+```
+
+```js
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100] // set of numbers
+
+console.log(numbers.length) // => to know the size of the array, which is 6
+console.log(numbers) // -> [0, 3.14, 9.81, 37, 98.6, 100]
+console.log(numbers[0]) // -> 0
+console.log(numbers[5]) // -> 100
+
+let lastIndex = numbers.length - 1;
+console.log(numbers[lastIndex]) // -> 100
+```
+
+```js
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs) // all the array items
+console.log(webTechs.length) // => to know the size of the array, which is 7
+console.log(webTechs[0]) // -> HTML
+console.log(webTechs[6]) // -> MongoDB
+
+let lastIndex = webTechs.length - 1
+console.log(webTechs[lastIndex]) // -> MongoDB
+```
+
+```js
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+] // List of countries
+
+console.log(countries) // -> all countries in array
+console.log(countries[0]) // -> Albania
+console.log(countries[10]) // -> Kenya
+
+let lastIndex = countries.length - 1;
+console.log(countries[lastIndex]) // -> Kenya
+```
+
+```js
+const shoppingCart = [
+ 'Milk',
+ 'Mango',
+ 'Tomato',
+ 'Potato',
+ 'Avocado',
+ 'Meat',
+ 'Eggs',
+ 'Sugar'
+] // List of food products
+
+console.log(shoppingCart) // -> all shoppingCart in array
+console.log(shoppingCart[0]) // -> Milk
+console.log(shoppingCart[7]) // -> Sugar
+
+let lastIndex = shoppingCart.length - 1;
+console.log(shoppingCart[lastIndex]) // -> Sugar
+```
+
+### Modifying array element
+
+An array is mutable(modifiable). Once an array is created, we can modify the contents of the array elements.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers[0] = 10 // changing 1 at index 0 to 10
+numbers[1] = 20 // changing 2 at index 1 to 20
+
+console.log(numbers) // [10, 20, 3, 4, 5]
+
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+]
+
+countries[0] = 'Afghanistan' // Replacing Albania by Afghanistan
+let lastIndex = countries.length - 1
+countries[lastIndex] = 'Korea' // Replacing Kenya by Korea
+
+console.log(countries)
+```
+
+```sh
+["Afghanistan", "Bolivia", "Canada", "Denmark", "Ethiopia", "Finland", "Germany", "Hungary", "Ireland", "Japan", "Korea"]
+```
+
+### Methods to manipulate array
+
+There are different methods to manipulate an array. These are some of the available methods to deal with arrays:_Array, length, concat, indexOf, slice, splice, join, toString, includes, lastIndexOf, isArray, fill, push, pop, shift, unshift_
+
+#### Array Constructor
+
+Array:To create an array.
+
+```js
+const arr = Array() // creates an an empty array
+console.log(arr)
+
+const eightEmptyValues = Array(8) // it creates eight empty values
+console.log(eightEmptyValues) // [empty x 8]
+```
+
+#### Creating static values with fill
+
+fill: Fill all the array elements with a static value
+
+```js
+const arr = Array() // creates an an empty array
+console.log(arr)
+
+const eightXvalues = Array(8).fill('X') // it creates eight element values filled with 'X'
+console.log(eightXvalues) // ['X', 'X','X','X','X','X','X','X']
+
+const eight0values = Array(8).fill(0) // it creates eight element values filled with '0'
+console.log(eight0values) // [0, 0, 0, 0, 0, 0, 0, 0]
+
+const four4values = Array(4).fill(4) // it creates 4 element values filled with '4'
+console.log(four4values) // [4, 4, 4, 4]
+```
+
+#### Concatenating array using concat
+
+concat:To concatenate two arrays.
+
+```js
+const firstList = [1, 2, 3]
+const secondList = [4, 5, 6]
+const thirdList = firstList.concat(secondList)
+
+console.log(thirdList) // [1, 2, 3, 4, 5, 6]
+```
+
+```js
+const fruits = ['banana', 'orange', 'mango', 'lemon'] // array of fruits
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot'] // array of vegetables
+const fruitsAndVegetables = fruits.concat(vegetables) // concatenate the two arrays
+
+console.log(fruitsAndVegetables)
+```
+
+```sh
+["banana", "orange", "mango", "lemon", "Tomato", "Potato", "Cabbage", "Onion", "Carrot"]
+```
+
+#### Getting array length
+
+Length:To know the size of the array
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.length) // -> 5 is the size of the array
+```
+
+#### Getting index an element in arr array
+
+indexOf:To check if an item exist in an array. If it exists it returns the index else it returns -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+
+console.log(numbers.indexOf(5)) // -> 4
+console.log(numbers.indexOf(0)) // -> -1
+console.log(numbers.indexOf(1)) // -> 0
+console.log(numbers.indexOf(6)) // -> -1
+```
+
+Check an element if it exist in an array.
+
+- Check items in a list
+
+```js
+// let us check if a banana exist in the array
+
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+let index = fruits.indexOf('banana') // 0
+
+if(index != -1){
+ console.log('This fruit does exist in the array')
+} else {
+ console.log('This fruit does not exist in the array')
+}
+// This fruit does exist in the array
+
+// we can use also ternary here
+index != -1 ? console.log('This fruit does exist in the array'): console.log('This fruit does not exist in the array')
+
+// let us check if a avocado exist in the array
+let indexOfAvocado = fruits.indexOf('avocado') // -1, if the element not found index is -1
+if(indexOfAvocado!= -1){
+ console.log('This fruit does exist in the array')
+} else {
+ console.log('This fruit does not exist in the array')
+}
+// This fruit does not exist in the array
+```
+
+#### Getting last index of an element in array
+
+lastIndexOf: It gives the position of the last item in the array. If it exist, it returns the index else it returns -1.
+
+```js
+const numbers = [1, 2, 3, 4, 5, 3, 1, 2]
+
+console.log(numbers.lastIndexOf(2)) // 7
+console.log(numbers.lastIndexOf(0)) // -1
+console.log(numbers.lastIndexOf(1)) // 6
+console.log(numbers.lastIndexOf(4)) // 3
+console.log(numbers.lastIndexOf(6)) // -1
+```
+
+includes:To check if an item exist in an array. If it exist it returns the true else it returns false.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+
+console.log(numbers.includes(5)) // true
+console.log(numbers.includes(0)) // false
+console.log(numbers.includes(1)) // true
+console.log(numbers.includes(6)) // false
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs.includes('Node')) // true
+console.log(webTechs.includes('C')) // false
+```
+
+#### Checking array
+
+Array.isArray:To check if the data type is an array
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(Array.isArray(numbers)) // true
+
+const number = 100
+console.log(Array.isArray(number)) // false
+```
+
+#### Converting array to string
+
+toString:Converts array to string
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.toString()) // 1,2,3,4,5
+
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+console.log(names.toString()) // Asabeneh,Mathias,Elias,Brook
+```
+
+#### Joining array elements
+
+join: It is used to join the elements of the array, the argument we passed in the join method will be joined in the array and return as a string. By default, it joins with a comma, but we can pass different string parameter which can be joined between the items.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+console.log(numbers.join()) // 1,2,3,4,5
+
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+
+console.log(names.join()) // Asabeneh,Mathias,Elias,Brook
+console.log(names.join('')) //AsabenehMathiasEliasBrook
+console.log(names.join(' ')) //Asabeneh Mathias Elias Brook
+console.log(names.join(', ')) //Asabeneh, Mathias, Elias, Brook
+console.log(names.join(' # ')) //Asabeneh # Mathias # Elias # Brook
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+] // List of web technologies
+
+console.log(webTechs.join()) // "HTML,CSS,JavaScript,React,Redux,Node,MongoDB"
+console.log(webTechs.join(' # ')) // "HTML # CSS # JavaScript # React # Redux # Node # MongoDB"
+```
+
+#### Slice array elements
+
+Slice: To cut out a multiple items in range. It takes two parameters:starting and ending position. It doesn't include the ending position.
+
+```js
+ const numbers = [1,2,3,4,5]
+
+ console.log(numbers.slice()) // -> it copies all item
+ console.log(numbers.slice(0)) // -> it copies all item
+ console.log(numbers.slice(0, numbers.length)) // it copies all item
+ console.log(numbers.slice(1,4)) // -> [2,3,4] // it doesn't include the ending position
+```
+
+#### Splice method in array
+
+Splice: It takes three parameters:Starting position, number of times to be removed and number of items to be added.
+
+```js
+ const numbers = [1, 2, 3, 4, 5]
+
+ console.log(numbers.splice()) // -> remove all items
+
+```
+
+```js
+ const numbers = [1, 2, 3, 4, 5]
+ console.log(numbers.splice(0,1)) // remove the first item
+```
+
+```js
+ const numbers = [1, 2, 3, 4, 5, 6];
+ console.log(numbers.splice(3, 3, 7, 8, 9)) // -> [1, 2, 3, 7, 8, 9] //it removes three item and replace three items
+```
+
+#### Adding item to an array using push
+
+Push: adding item in the end. To add item to the end of an existing array we use the push method.
+
+```js
+// syntax
+const arr = ['item1', 'item2','item3']
+arr.push('new item')
+
+console.log(arr)
+// ['item1', 'item2','item3','new item']
+```
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.push(6)
+
+console.log(numbers) // -> [1,2,3,4,5,6]
+
+numbers.pop() // -> remove one item from the end
+console.log(numbers) // -> [1,2,3,4,5]
+```
+
+```js
+let fruits = ['banana', 'orange', 'mango', 'lemon']
+fruits.push('apple')
+
+console.log(fruits) // ['banana', 'orange', 'mango', 'lemon', 'apple']
+
+fruits.push('lime')
+console.log(fruits) // ['banana', 'orange', 'mango', 'lemon', 'apple', 'lime']
+```
+
+#### Removing the end element using pop
+
+pop: Removing item in the end.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.pop() // -> remove one item from the end
+
+console.log(numbers) // -> [1,2,3,4]
+```
+
+#### Removing an element from the beginning
+
+shift: Removing one array element in the beginning of the array.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.shift() // -> remove one item from the beginning
+
+console.log(numbers) // -> [2,3,4,5]
+```
+
+#### Add an element from the beginning
+
+unshift: Adding array element in the beginning of the array.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.unshift(0) // -> add one item from the beginning
+
+console.log(numbers) // -> [0,1,2,3,4,5]
+```
+
+#### Reversing array order
+
+reverse: reverse the order of an array.
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+numbers.reverse() // -> reverse array order
+
+console.log(numbers) // [5, 4, 3, 2, 1]
+
+numbers.reverse()
+console.log(numbers) // [1, 2, 3, 4, 5]
+```
+
+#### Sorting elements in array
+
+sort: arrange array elements in ascending order. Sort takes a call back function, we will see how we use sort with a call back function in the coming sections.
+
+```js
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+webTechs.sort()
+console.log(webTechs) // ["CSS", "HTML", "JavaScript", "MongoDB", "Node", "React", "Redux"]
+
+webTechs.reverse() // after sorting we can reverse it
+console.log(webTechs) // ["Redux", "React", "Node", "MongoDB", "JavaScript", "HTML", "CSS"]
+```
+
+### Array of arrays
+
+Array can store different data types including an array itself. Let us create an array of arrays
+
+```js
+const firstNums = [1, 2, 3]
+const secondNums = [1, 4, 9]
+
+const arrayOfArray = [[1, 2, 3], [1, 2, 3]]
+console.log(arrayOfArray[0]) // [1, 2, 3]
+
+ const frontEnd = ['HTML', 'CSS', 'JS', 'React', 'Redux']
+ const backEnd = ['Node','Express', 'MongoDB']
+ const fullStack = [frontEnd, backEnd]
+ console.log(fullStack) // [["HTML", "CSS", "JS", "React", "Redux"], ["Node", "Express", "MongoDB"]]
+ console.log(fullStack.length) // 2
+ console.log(fullStack[0]) // ["HTML", "CSS", "JS", "React", "Redux"]
+ console.log(fullStack[1]) // ["Node", "Express", "MongoDB"]
+```
+
+🌕 You are diligent and you have already achieved quite a lot. You have just completed day 5 challenges and you are 5 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Exercise
+
+### Exercise: Level 1
+
+```js
+const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+]
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+```
+
+1. Declare an _empty_ array;
+2. Declare an array with more than 5 number of elements
+3. Find the length of your array
+4. Get the first item, the middle item and the last item of the array
+5. Declare an array called _mixedDataTypes_, put different data types in the array and find the length of the array. The array size should be greater than 5
+6. Declare an array variable name itCompanies and assign initial values Facebook, Google, Microsoft, Apple, IBM, Oracle and Amazon
+7. Print the array using _console.log()_
+8. Print the number of companies in the array
+9. Print the first company, middle and last company
+10. Print out each company
+11. Change each company name to uppercase one by one and print them out
+12. Print the array like as a sentence: Facebook, Google, Microsoft, Apple, IBM,Oracle and Amazon are big IT companies.
+13. Check if a certain company exists in the itCompanies array. If it exist return the company else return a company is _not found_
+14. Filter out companies which have more than one 'o' without the filter method
+15. Sort the array using _sort()_ method
+16. Reverse the array using _reverse()_ method
+17. Slice out the first 3 companies from the array
+18. Slice out the last 3 companies from the array
+19. Slice out the middle IT company or companies from the array
+20. Remove the first IT company from the array
+21. Remove the middle IT company or companies from the array
+22. Remove the last IT company from the array
+23. Remove all IT companies
+
+### Exercise: Level 2
+
+1. Create a separate countries.js file and store the countries array in to this file, create a separate file web_techs.js and store the webTechs array in to this file. Access both file in main.js file
+1. First remove all the punctuations and change the string to array and count the number of words in the array
+
+ ```js
+ let text =
+ 'I love teaching and empowering people. I teach HTML, CSS, JS, React, Python.'
+ console.log(words)
+ console.log(words.length)
+ ```
+
+ ```sh
+ ["I", "love", "teaching", "and", "empowering", "people", "I", "teach", "HTML", "CSS", "JS", "React", "Python"]
+
+ 13
+ ```
+
+1. In the following shopping cart add, remove, edit items
+
+ ```js
+ const shoppingCart = ['Milk', 'Coffee', 'Tea', 'Honey']
+ ```
+
+ - add 'Meat' in the beginning of your shopping cart if it has not been already added
+ - add Sugar at the end of you shopping cart if it has not been already added
+ - remove 'Honey' if you are allergic to honey
+ - modify Tea to 'Green Tea'
+1. In countries array check if 'Ethiopia' exists in the array if it exists print 'ETHIOPIA'. If it does not exist add to the countries list.
+1. In the webTechs array check if Sass exists in the array and if it exists print 'Sass is a CSS preprocess'. If it does not exist add Sass to the array and print the array.
+1. Concatenate the following two variables and store it in a fullStack variable.
+
+ ```js
+ const frontEnd = ['HTML', 'CSS', 'JS', 'React', 'Redux']
+ const backEnd = ['Node','Express', 'MongoDB']
+
+ console.log(fullStack)
+ ```
+
+ ```sh
+ ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"]
+ ```
+
+### Exercise: Level 3
+
+1. The following is an array of 10 students ages:
+
+ ```js
+ const ages = [19, 22, 19, 24, 20, 25, 26, 24, 25, 24]
+ ```
+
+ - Sort the array and find the min and max age
+ - Find the median age(one middle item or two middle items divided by two)
+ - Find the average age(all items divided by number of items)
+ - Find the range of the ages(max minus min)
+ - Compare the value of (min - average) and (max - average), use *abs()* method
+1.Slice the first ten countries from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Find the middle country(ies) in the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+2. Divide the countries array into two equal arrays if it is even. If countries array is not even , one more country for the first half.
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 4](../04_Day_Conditionals/04_day_Conditionals.md) | [Day 6 >>](../06_Day_Loops/06_day_loops.md)
diff --git a/ID/05_Day_Arrays/05_day_starter/data/countries.js b/ID/05_Day_Arrays/05_day_starter/data/countries.js
new file mode 100644
index 0000000..e57b005
--- /dev/null
+++ b/ID/05_Day_Arrays/05_day_starter/data/countries.js
@@ -0,0 +1,195 @@
+const countries = [
+ 'Afghanistan',
+ 'Albania',
+ 'Algeria',
+ 'Andorra',
+ 'Angola',
+ 'Antigua and Barbuda',
+ 'Argentina',
+ 'Armenia',
+ 'Australia',
+ 'Austria',
+ 'Azerbaijan',
+ 'Bahamas',
+ 'Bahrain',
+ 'Bangladesh',
+ 'Barbados',
+ 'Belarus',
+ 'Belgium',
+ 'Belize',
+ 'Benin',
+ 'Bhutan',
+ 'Bolivia',
+ 'Bosnia and Herzegovina',
+ 'Botswana',
+ 'Brazil',
+ 'Brunei',
+ 'Bulgaria',
+ 'Burkina Faso',
+ 'Burundi',
+ 'Cambodia',
+ 'Cameroon',
+ 'Canada',
+ 'Cape Verde',
+ 'Central African Republic',
+ 'Chad',
+ 'Chile',
+ 'China',
+ 'Colombi',
+ 'Comoros',
+ 'Congo (Brazzaville)',
+ 'Congo',
+ 'Costa Rica',
+ "Cote d'Ivoire",
+ 'Croatia',
+ 'Cuba',
+ 'Cyprus',
+ 'Czech Republic',
+ 'Denmark',
+ 'Djibouti',
+ 'Dominica',
+ 'Dominican Republic',
+ 'East Timor (Timor Timur)',
+ 'Ecuador',
+ 'Egypt',
+ 'El Salvador',
+ 'Equatorial Guinea',
+ 'Eritrea',
+ 'Estonia',
+ 'Ethiopia',
+ 'Fiji',
+ 'Finland',
+ 'France',
+ 'Gabon',
+ 'Gambia, The',
+ 'Georgia',
+ 'Germany',
+ 'Ghana',
+ 'Greece',
+ 'Grenada',
+ 'Guatemala',
+ 'Guinea',
+ 'Guinea-Bissau',
+ 'Guyana',
+ 'Haiti',
+ 'Honduras',
+ 'Hungary',
+ 'Iceland',
+ 'India',
+ 'Indonesia',
+ 'Iran',
+ 'Iraq',
+ 'Ireland',
+ 'Israel',
+ 'Italy',
+ 'Jamaica',
+ 'Japan',
+ 'Jordan',
+ 'Kazakhstan',
+ 'Kenya',
+ 'Kiribati',
+ 'Korea, North',
+ 'Korea, South',
+ 'Kuwait',
+ 'Kyrgyzstan',
+ 'Laos',
+ 'Latvia',
+ 'Lebanon',
+ 'Lesotho',
+ 'Liberia',
+ 'Libya',
+ 'Liechtenstein',
+ 'Lithuania',
+ 'Luxembourg',
+ 'Macedonia',
+ 'Madagascar',
+ 'Malawi',
+ 'Malaysia',
+ 'Maldives',
+ 'Mali',
+ 'Malta',
+ 'Marshall Islands',
+ 'Mauritania',
+ 'Mauritius',
+ 'Mexico',
+ 'Micronesia',
+ 'Moldova',
+ 'Monaco',
+ 'Mongolia',
+ 'Morocco',
+ 'Mozambique',
+ 'Myanmar',
+ 'Namibia',
+ 'Nauru',
+ 'Nepal',
+ 'Netherlands',
+ 'New Zealand',
+ 'Nicaragua',
+ 'Niger',
+ 'Nigeria',
+ 'Norway',
+ 'Oman',
+ 'Pakistan',
+ 'Palau',
+ 'Panama',
+ 'Papua New Guinea',
+ 'Paraguay',
+ 'Peru',
+ 'Philippines',
+ 'Poland',
+ 'Portugal',
+ 'Qatar',
+ 'Romania',
+ 'Russia',
+ 'Rwanda',
+ 'Saint Kitts and Nevis',
+ 'Saint Lucia',
+ 'Saint Vincent',
+ 'Samoa',
+ 'San Marino',
+ 'Sao Tome and Principe',
+ 'Saudi Arabia',
+ 'Senegal',
+ 'Serbia and Montenegro',
+ 'Seychelles',
+ 'Sierra Leone',
+ 'Singapore',
+ 'Slovakia',
+ 'Slovenia',
+ 'Solomon Islands',
+ 'Somalia',
+ 'South Africa',
+ 'Spain',
+ 'Sri Lanka',
+ 'Sudan',
+ 'Suriname',
+ 'Swaziland',
+ 'Sweden',
+ 'Switzerland',
+ 'Syria',
+ 'Taiwan',
+ 'Tajikistan',
+ 'Tanzania',
+ 'Thailand',
+ 'Togo',
+ 'Tonga',
+ 'Trinidad and Tobago',
+ 'Tunisia',
+ 'Turkey',
+ 'Turkmenistan',
+ 'Tuvalu',
+ 'Uganda',
+ 'Ukraine',
+ 'United Arab Emirates',
+ 'United Kingdom',
+ 'United States',
+ 'Uruguay',
+ 'Uzbekistan',
+ 'Vanuatu',
+ 'Vatican City',
+ 'Venezuela',
+ 'Vietnam',
+ 'Yemen',
+ 'Zambia',
+ 'Zimbabwe'
+]
diff --git a/ID/05_Day_Arrays/05_day_starter/index.html b/ID/05_Day_Arrays/05_day_starter/index.html
new file mode 100644
index 0000000..8f138fb
--- /dev/null
+++ b/ID/05_Day_Arrays/05_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:05 Day
+
+
+
+
30DaysOfJavaScript:05 Day
+
Arrays
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/05_Day_Arrays/05_day_starter/scripts/main.js b/ID/05_Day_Arrays/05_day_starter/scripts/main.js
new file mode 100644
index 0000000..50cc07e
--- /dev/null
+++ b/ID/05_Day_Arrays/05_day_starter/scripts/main.js
@@ -0,0 +1,3 @@
+console.log(countries)
+alert('Open the browser console whenever you work on JavaScript')
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/06_Day_Loops/06_day_loops.md b/ID/06_Day_Loops/06_day_loops.md
new file mode 100644
index 0000000..f0809fb
--- /dev/null
+++ b/ID/06_Day_Loops/06_day_loops.md
@@ -0,0 +1,481 @@
+
+
+[<< Day 5](../05_Day_Arrays/05_day_arrays.md) | [Day 7 >>](../07_Day_Functions/07_day_functions.md)
+
+
+
+- [📔 Day 6](#-day-6)
+ - [Loops](#loops)
+ - [for Loop](#for-loop)
+ - [while loop](#while-loop)
+ - [do while loop](#do-while-loop)
+ - [for of loop](#for-of-loop)
+ - [break](#break)
+ - [continue](#continue)
+ - [💻 Exercises:Day 6](#-exercisesday-6)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 6
+
+## Loops
+
+Most of the activities we do in life are full of repetitions. Imagine if I ask you to print out from 0 to 100 using console.log(). To implement this simple task it may take you 2 to 5 minutes, such kind of tedious and repetitive task can be carried out using loop. If you prefer watching the videos, you can checkout the [video tutorials](https://www.youtube.com/channel/UCM4xOopkYiPwJqyKsSqL9mw)
+
+In programming languages to carry out repetitive task we use different kinds of loops. The following examples are the commonly used loops in JavaScript and other programming languages.
+
+### for Loop
+
+```js
+// For loop structure
+for(initialization, condition, increment/decrement){
+ // code goes here
+}
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(i)
+}
+
+// 0 1 2 3 4 5
+```
+
+```js
+for(let i = 5; i >= 0; i--){
+ console.log(i)
+}
+
+// 5 4 3 2 1 0
+```
+
+```js
+for(let i = 0; i <= 5; i++){
+ console.log(`${i} * ${i} = ${i * i}`)
+}
+```
+
+```sh
+0 * 0 = 0
+1 * 1 = 1
+2 * 2 = 4
+3 * 3 = 9
+4 * 4 = 16
+5 * 5 = 25
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Denmark', 'Norway', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+// ["FINLAND", "SWEDEN", "DENMARK", "NORWAY", "ICELAND"]
+```
+
+Adding all elements in the array
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ sum = sum + numbers[i] // can be shorten, sum += numbers[i]
+
+}
+
+console.log(sum) // 15
+```
+
+Creating a new array based on the existing array
+
+```js
+const numbers = [1, 2, 3, 4, 5]
+const newArr = []
+let sum = 0
+for(let i = 0; i < numbers.length; i++){
+ newArr.push(i * i)
+
+}
+
+console.log(newArr) // [1, 4, 9, 16, 25]
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(let i = 0; i < countries.length; i++){
+ newArr.push(countries[i].toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### while loop
+
+```js
+let i = 0
+while (i <= 5) {
+ console.log(i)
+ i++
+}
+
+// 0 1 2 3 4 5
+```
+
+### do while loop
+
+```js
+let i = 0
+do {
+ console.log(i)
+ i++
+} while (i <= 5)
+
+// 0 1 2 3 4 5
+```
+
+### for of loop
+
+We use for of loop for arrays. It is very hand way to iterate through an array if we are not interested in the index of each element in the array.
+
+```js
+for (const element of arr) {
+ // code goes here
+}
+```
+
+```js
+
+const numbers = [1, 2, 3, 4, 5]
+
+for (const num of numbers) {
+ console.log(num)
+}
+
+// 1 2 3 4 5
+
+for (const num of numbers) {
+ console.log(num * num)
+}
+
+// 1 4 9 16 25
+
+// adding all the numbers in the array
+let sum = 0
+for (const num of numbers) {
+ sum += sum + num // can be also shorten like this, sum += num
+}
+console.log(sum) // 15
+
+const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+]
+
+for (const tech of webTechs) {
+ console.log(tech.toUpperCase())
+}
+
+// HTML CSS JAVASCRIPT REACT NODE MONGODB
+
+for (const tech of webTechs) {
+ console.log(tech[0]) // get only the first letter of each element, H C J R N M
+}
+
+```
+
+```js
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+const newArr = []
+for(const country of countries){
+ newArr.push(country.toUpperCase())
+}
+
+console.log(newArr) // ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+### break
+
+Break is used to interrupt a loop.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ break
+ }
+ console.log(i)
+}
+
+// 0 1 2
+```
+
+The above code stops if 3 found in the iteration process.
+
+### continue
+
+We use the keyword *continue* to skip a certain iterations.
+
+```js
+for(let i = 0; i <= 5; i++){
+ if(i == 3){
+ continue
+ }
+ console.log(i)
+}
+
+// 0 1 2 4 5
+```
+
+🌕 You are so brave, you made it to this far. Now, you have gained the power to automate repetitive and tedious tasks. You have just completed day 6 challenges and you are 6 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Exercises:Day 6
+
+### Exercises: Level 1
+
+ ```js
+ const countries = [
+ 'Albania',
+ 'Bolivia',
+ 'Canada',
+ 'Denmark',
+ 'Ethiopia',
+ 'Finland',
+ 'Germany',
+ 'Hungary',
+ 'Ireland',
+ 'Japan',
+ 'Kenya'
+ ]
+
+ const webTechs = [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Redux',
+ 'Node',
+ 'MongoDB'
+ ]
+
+ const mernStack = ['MongoDB', 'Express', 'React', 'Node']
+ ```
+
+1. Iterate 0 to 10 using for loop, do the same using while and do while loop
+2. Iterate 10 to 0 using for loop, do the same using while and do while loop
+3. Iterate 0 to n using for loop
+4. Write a loop that makes the following pattern using console.log():
+
+ ```js
+ #
+ ##
+ ###
+ ####
+ #####
+ ######
+ #######
+ ```
+
+5. Use loop to print the following pattern:
+
+ ```sh
+ 0 x 0 = 0
+ 1 x 1 = 1
+ 2 x 2 = 4
+ 3 x 3 = 9
+ 4 x 4 = 16
+ 5 x 5 = 25
+ 6 x 6 = 36
+ 7 x 7 = 49
+ 8 x 8 = 64
+ 9 x 9 = 81
+ 10 x 10 = 100
+ ```
+
+6. Using loop print the following pattern
+
+ ```sh
+ i i^2 i^3
+ 0 0 0
+ 1 1 1
+ 2 4 8
+ 3 9 27
+ 4 16 64
+ 5 25 125
+ 6 36 216
+ 7 49 343
+ 8 64 512
+ 9 81 729
+ 10 100 1000
+ ```
+
+7. Use for loop to iterate from 0 to 100 and print only even numbers
+8. Use for loop to iterate from 0 to 100 and print only odd numbers
+9. Use for loop to iterate from 0 to 100 and print only prime numbers
+10. Use for loop to iterate from 0 to 100 and print the sum of all numbers.
+
+ ```sh
+ The sum of all numbers from 0 to 100 is 5050.
+ ```
+
+11. Use for loop to iterate from 0 to 100 and print the sum of all evens and the sum of all odds.
+
+ ```sh
+ The sum of all evens from 0 to 100 is 2550. And the sum of all odds from 0 to 100 is 2500.
+ ```
+
+12. Use for loop to iterate from 0 to 100 and print the sum of all evens and the sum of all odds. Print sum of evens and sum of odds as array
+
+ ```sh
+ [2550, 2500]
+ ```
+
+13. Develop a small script which generate array of 5 random numbers
+14. Develop a small script which generate array of 5 random numbers and the numbers must be unique
+15. Develop a small script which generate a six characters random id:
+
+ ```sh
+ 5j2khz
+ ```
+
+### Exercises: Level 2
+
+1. Develop a small script which generate any number of characters random id:
+
+ ```sh
+ fe3jo1gl124g
+ ```
+
+ ```sh
+ xkqci4utda1lmbelpkm03rba
+ ```
+
+1. Write a script which generates a random hexadecimal number.
+
+ ```sh
+ '#ee33df'
+ ```
+
+1. Write a script which generates a random rgb color number.
+
+ ```sh
+ rgb(240,180,80)
+ ```
+
+1. Using the above countries array, create the following new array.
+
+ ```sh
+ ["ALBANIA", "BOLIVIA", "CANADA", "DENMARK", "ETHIOPIA", "FINLAND", "GERMANY", "HUNGARY", "IRELAND", "JAPAN", "KENYA"]
+ ```
+
+1. Using the above countries array, create an array for countries length'.
+
+ ```sh
+ [7, 7, 6, 7, 8, 7, 7, 7, 7, 5, 5]
+ ```
+
+1. Use the countries array to create the following array of arrays:
+
+ ```sh
+ [
+ ['Albania', 'ALB', 7],
+ ['Bolivia', 'BOL', 7],
+ ['Canada', 'CAN', 6],
+ ['Denmark', 'DEN', 7],
+ ['Ethiopia', 'ETH', 8],
+ ['Finland', 'FIN', 7],
+ ['Germany', 'GER', 7],
+ ['Hungary', 'HUN', 7],
+ ['Ireland', 'IRE', 7],
+ ['Japan', 'JAP', 5],
+ ['Kenya', 'KEN', 5]
+ ]
+ ```
+
+2. In above countries array, check if there is a country or countries containing the word 'land'. If there are countries containing 'land', print it as array. If there is no country containing the word 'land', print 'All these countries are without land'.
+
+ ```sh
+ ['Finland', 'Iceland']
+ ```
+
+3. In above countries array, check if there is a country or countries end with a substring 'ia'. If there are countries end with, print it as array. If there is no country containing the word 'ai', print 'These are countries ends without ia'.
+
+ ```sh
+ ['Albania', 'Bolivia','Ethiopia']
+ ```
+
+4. Using the above countries array, find the country containing the biggest number of characters.
+
+ ```sh
+ Ethiopia
+ ```
+
+5. Using the above countries array, find the country containing only 5 characters.
+
+ ```sh
+ ['Japan', 'Kenya']
+ ```
+
+6. Find the longest word in the webTechs array
+7. Use the webTechs array to create the following array of arrays:
+
+ ```sh
+ [["HTML", 4], ["CSS", 3],["JavaScript", 10],["React", 5],["Redux", 5],["Node", 4],["MongoDB", 7]]
+ ```
+
+8. An application created using MongoDB, Express, React and Node is called a MERN stack app. Create the acronym MERN by using the array mernStack
+9. Iterate through the array, ["HTML", "CSS", "JS", "React", "Redux", "Node", "Express", "MongoDB"] using a for loop or for of loop and print out the items.
+10. This is a fruit array , ['banana', 'orange', 'mango', 'lemon'] reverse the order using loop without using a reverse method.
+11. Print all the elements of array as shown below.
+
+ ```js
+ const fullStack = [
+ ['HTML', 'CSS', 'JS', 'React'],
+ ['Node', 'Express', 'MongoDB']
+ ]
+ ````
+
+ ```sh
+ HTML
+ CSS
+ JS
+ REACT
+ NODE
+ EXPRESS
+ MONGODB
+ ```
+
+### Exercises: Level 3
+
+1. Copy countries array(Avoid mutation)
+1. Arrays are mutable. Create a copy of array which does not modify the original. Sort the copied array and store in a variable sortedCountries
+1. Sort the webTechs array and mernStack array
+1. Extract all the countries contain the word 'land' from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) and print it as array
+1. Find the country containing the hightest number of characters in the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js)
+1. Extract all the countries contain the word 'land' from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) and print it as array
+1. Extract all the countries containing only four characters from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) and print it as array
+1. Extract all the countries containing two or more words from the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) and print it as array
+1. Reverse the [countries array](https://github.com/Asabeneh/30DaysOfJavaScript/tree/master/data/countries.js) and capitalize each country and stored it as an array
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 5](../05_Day_Arrays/05_day_arrays.md) | [Day 7 >>](../07_Day_Functions/07_day_functions.md)
diff --git a/ID/06_Day_Loops/06_day_starter/data/countries.js b/ID/06_Day_Loops/06_day_starter/data/countries.js
new file mode 100644
index 0000000..e57b005
--- /dev/null
+++ b/ID/06_Day_Loops/06_day_starter/data/countries.js
@@ -0,0 +1,195 @@
+const countries = [
+ 'Afghanistan',
+ 'Albania',
+ 'Algeria',
+ 'Andorra',
+ 'Angola',
+ 'Antigua and Barbuda',
+ 'Argentina',
+ 'Armenia',
+ 'Australia',
+ 'Austria',
+ 'Azerbaijan',
+ 'Bahamas',
+ 'Bahrain',
+ 'Bangladesh',
+ 'Barbados',
+ 'Belarus',
+ 'Belgium',
+ 'Belize',
+ 'Benin',
+ 'Bhutan',
+ 'Bolivia',
+ 'Bosnia and Herzegovina',
+ 'Botswana',
+ 'Brazil',
+ 'Brunei',
+ 'Bulgaria',
+ 'Burkina Faso',
+ 'Burundi',
+ 'Cambodia',
+ 'Cameroon',
+ 'Canada',
+ 'Cape Verde',
+ 'Central African Republic',
+ 'Chad',
+ 'Chile',
+ 'China',
+ 'Colombi',
+ 'Comoros',
+ 'Congo (Brazzaville)',
+ 'Congo',
+ 'Costa Rica',
+ "Cote d'Ivoire",
+ 'Croatia',
+ 'Cuba',
+ 'Cyprus',
+ 'Czech Republic',
+ 'Denmark',
+ 'Djibouti',
+ 'Dominica',
+ 'Dominican Republic',
+ 'East Timor (Timor Timur)',
+ 'Ecuador',
+ 'Egypt',
+ 'El Salvador',
+ 'Equatorial Guinea',
+ 'Eritrea',
+ 'Estonia',
+ 'Ethiopia',
+ 'Fiji',
+ 'Finland',
+ 'France',
+ 'Gabon',
+ 'Gambia, The',
+ 'Georgia',
+ 'Germany',
+ 'Ghana',
+ 'Greece',
+ 'Grenada',
+ 'Guatemala',
+ 'Guinea',
+ 'Guinea-Bissau',
+ 'Guyana',
+ 'Haiti',
+ 'Honduras',
+ 'Hungary',
+ 'Iceland',
+ 'India',
+ 'Indonesia',
+ 'Iran',
+ 'Iraq',
+ 'Ireland',
+ 'Israel',
+ 'Italy',
+ 'Jamaica',
+ 'Japan',
+ 'Jordan',
+ 'Kazakhstan',
+ 'Kenya',
+ 'Kiribati',
+ 'Korea, North',
+ 'Korea, South',
+ 'Kuwait',
+ 'Kyrgyzstan',
+ 'Laos',
+ 'Latvia',
+ 'Lebanon',
+ 'Lesotho',
+ 'Liberia',
+ 'Libya',
+ 'Liechtenstein',
+ 'Lithuania',
+ 'Luxembourg',
+ 'Macedonia',
+ 'Madagascar',
+ 'Malawi',
+ 'Malaysia',
+ 'Maldives',
+ 'Mali',
+ 'Malta',
+ 'Marshall Islands',
+ 'Mauritania',
+ 'Mauritius',
+ 'Mexico',
+ 'Micronesia',
+ 'Moldova',
+ 'Monaco',
+ 'Mongolia',
+ 'Morocco',
+ 'Mozambique',
+ 'Myanmar',
+ 'Namibia',
+ 'Nauru',
+ 'Nepal',
+ 'Netherlands',
+ 'New Zealand',
+ 'Nicaragua',
+ 'Niger',
+ 'Nigeria',
+ 'Norway',
+ 'Oman',
+ 'Pakistan',
+ 'Palau',
+ 'Panama',
+ 'Papua New Guinea',
+ 'Paraguay',
+ 'Peru',
+ 'Philippines',
+ 'Poland',
+ 'Portugal',
+ 'Qatar',
+ 'Romania',
+ 'Russia',
+ 'Rwanda',
+ 'Saint Kitts and Nevis',
+ 'Saint Lucia',
+ 'Saint Vincent',
+ 'Samoa',
+ 'San Marino',
+ 'Sao Tome and Principe',
+ 'Saudi Arabia',
+ 'Senegal',
+ 'Serbia and Montenegro',
+ 'Seychelles',
+ 'Sierra Leone',
+ 'Singapore',
+ 'Slovakia',
+ 'Slovenia',
+ 'Solomon Islands',
+ 'Somalia',
+ 'South Africa',
+ 'Spain',
+ 'Sri Lanka',
+ 'Sudan',
+ 'Suriname',
+ 'Swaziland',
+ 'Sweden',
+ 'Switzerland',
+ 'Syria',
+ 'Taiwan',
+ 'Tajikistan',
+ 'Tanzania',
+ 'Thailand',
+ 'Togo',
+ 'Tonga',
+ 'Trinidad and Tobago',
+ 'Tunisia',
+ 'Turkey',
+ 'Turkmenistan',
+ 'Tuvalu',
+ 'Uganda',
+ 'Ukraine',
+ 'United Arab Emirates',
+ 'United Kingdom',
+ 'United States',
+ 'Uruguay',
+ 'Uzbekistan',
+ 'Vanuatu',
+ 'Vatican City',
+ 'Venezuela',
+ 'Vietnam',
+ 'Yemen',
+ 'Zambia',
+ 'Zimbabwe'
+]
diff --git a/ID/06_Day_Loops/06_day_starter/index.html b/ID/06_Day_Loops/06_day_starter/index.html
new file mode 100644
index 0000000..28d2d78
--- /dev/null
+++ b/ID/06_Day_Loops/06_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:06 Day
+
+
+
+
30DaysOfJavaScript:06 Day
+
Loops
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/06_Day_Loops/06_day_starter/scripts/main.js b/ID/06_Day_Loops/06_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/06_Day_Loops/06_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/07_Day_Functions/07_day_functions.md b/ID/07_Day_Functions/07_day_functions.md
new file mode 100644
index 0000000..202ffad
--- /dev/null
+++ b/ID/07_Day_Functions/07_day_functions.md
@@ -0,0 +1,706 @@
+
+
+[<< Day 6](../06_Day_Loops/06_day_loops.md) | [Day 8 >>](../08_Day_Objects/08_day_objects.md)
+
+
+
+- [📔 Day 7](#-day-7)
+ - [Functions](#functions)
+ - [Function Declaration](#function-declaration)
+ - [Function without a parameter and return](#function-without-a-parameter-and-return)
+ - [Function returning value](#function-returning-value)
+ - [Function with a parameter](#function-with-a-parameter)
+ - [Function with two parameters](#function-with-two-parameters)
+ - [Function with many parameters](#function-with-many-parameters)
+ - [Function with unlimited number of parameters](#function-with-unlimited-number-of-parameters)
+ - [Unlimited number of parameters in regular function](#unlimited-number-of-parameters-in-regular-function)
+ - [Unlimited number of parameters in arrow function](#unlimited-number-of-parameters-in-arrow-function)
+ - [Anonymous Function](#anonymous-function)
+ - [Expression Function](#expression-function)
+ - [Self Invoking Functions](#self-invoking-functions)
+ - [Arrow Function](#arrow-function)
+ - [Function with default parameters](#function-with-default-parameters)
+ - [Function declaration versus Arrow function](#function-declaration-versus-arrow-function)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 7
+
+## Functions
+
+So far we have seen many builtin JavaScript functions. In this section, we will focus on custom functions. What is a function? Before we start making functions, lets understand what function is and why we need function?
+
+A function is a reusable block of code or programming statements designed to perform a certain task.
+A function is declared by a function key word followed by a name, followed by parentheses (). A parentheses can take a parameter. If a function take a parameter it will be called with argument. A function can also take a default parameter. To store a data to a function, a function has to return certain data types. To get the value we call or invoke a function.
+Function makes code:
+
+- clean and easy to read
+- reusable
+- easy to test
+
+A function can be declared or created in couple of ways:
+
+- _Declaration function_
+- _Expression function_
+- _Anonymous function_
+- _Arrow function_
+
+### Function Declaration
+
+Let us see how to declare a function and how to call a function.
+
+```js
+//declaring a function without a parameter
+function functionName() {
+ // code goes here
+}
+functionName() // calling function by its name and with parentheses
+```
+
+### Function without a parameter and return
+
+Function can be declared without a parameter.
+
+**Example:**
+
+```js
+// function without parameter, a function which make a number square
+function square() {
+ let num = 2
+ let sq = num * num
+ console.log(sq)
+}
+
+square() // 4
+
+// function without parameter
+function addTwoNumbers() {
+ let numOne = 10
+ let numTwo = 20
+ let sum = numOne + numTwo
+
+ console.log(sum)
+}
+
+addTwoNumbers() // a function has to be called by its name to be executed
+```
+
+```js
+ function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ console.log(fullName)
+}
+
+printFullName() // calling a function
+```
+
+### Function returning value
+
+Function can also return values, if a function does not return values the value of the function is undefined. Let us write the above functions with return. From now on, we return value to a function instead of printing it.
+
+```js
+function printFullName (){
+ let firstName = 'Asabeneh'
+ let lastName = 'Yetayeh'
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+console.log(printFullName())
+```
+
+```js
+
+ function addTwoNumbers() {
+ let numOne = 2
+ let numTwo = 3
+ let total = numOne + numTwo
+ return total
+
+ }
+
+console.log(addTwoNumbers())
+```
+
+### Function with a parameter
+
+In a function we can pass different data types(number, string, boolean, object, function) as a parameter.
+
+```js
+// function with one parameter
+function functionName(parm1) {
+ //code goes her
+}
+functionName(parm1) // during calling or invoking one argument needed
+
+function areaOfCircle(r) {
+ let area = Math.PI * r * r
+ return area
+}
+
+console.log(areaOfCircle(10)) // should be called with one argument
+
+function square(number) {
+ return number * number
+}
+
+console.log(square(10))
+```
+
+### Function with two parameters
+
+```js
+// function with two parameters
+function functionName(parm1, parm2) {
+ //code goes her
+}
+functionName(parm1, parm2) // during calling or invoking two arguments needed
+// Function without parameter doesn't take input, so lets make a function with parameters
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ console.log(sum)
+}
+sumTwoNumbers(10, 20) // calling functions
+// If a function doesn't return it doesn't store data, so it should return
+
+function sumTwoNumbers(numOne, numTwo) {
+ let sum = numOne + numTwo
+ return sum
+}
+
+console.log(sumTwoNumbers(10, 20))
+function printFullName(firstName, lastName) {
+ return `${firstName} ${lastName}`
+}
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+### Function with many parameters
+
+```js
+// function with multiple parameters
+function functionName(parm1, parm2, parm3,...){
+ //code goes here
+}
+functionName(parm1,parm2,parm3,...) // during calling or invoking three arguments needed
+
+
+// this function takes array as a parameter and sum up the numbers in the array
+function sumArrayValues(arr) {
+ let sum = 0;
+ for (let i = 0; i < arr.length; i++) {
+ sum = sum + arr[i];
+ }
+ return sum;
+}
+const numbers = [1, 2, 3, 4, 5];
+ //calling a function
+console.log(sumArrayValues(numbers));
+
+
+ const areaOfCircle = (radius) => {
+ let area = Math.PI * radius * radius;
+ return area;
+ }
+console.log(areaOfCircle(10))
+
+```
+
+### Function with unlimited number of parameters
+
+Sometimes we do not know how many arguments the user going to pass. Therefore, we should know how to write a function which can take unlimited number of arguments. The way we do it has a significant difference between a function declaration(regular function) and arrow function. Let us see examples both in function declaration and arrow function.
+
+#### Unlimited number of parameters in regular function
+
+ A function declaration provides a function scoped arguments array like object. Any thing we passed as argument in the function can be accessed from arguments object inside the functions. Let us see an example
+
+ ```js
+// Let us access the arguments object
+
+function sumAllNums() {
+ console.log(arguments)
+}
+
+sumAllNums(1, 2, 3, 4))
+// Arguments(4) [1, 2, 3, 4, callee: ƒ, Symbol(Symbol.iterator): ƒ]
+
+```
+
+```js
+// function declaration
+
+function sumAllNums() {
+ let sum = 0
+ for (let i = 0; i < arguments.length; i++) {
+ sum += arguments[i]
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+#### Unlimited number of parameters in arrow function
+
+ Arrow function does not have the function scoped arguments object. To implement a function which takes unlimited number of arguments in an arrow function we use spread operator followed by any parameter name. Any thing we passed as argument in the function can be accessed as array in the arrow function. Let us see an example
+
+ ```js
+// Let us access the arguments object
+
+const sumAllNums = (...args) => {
+ // console.log(arguments), arguments object not found in arrow function
+ // instead we use an a parameter followed by spread operator
+ console.log(args)
+}
+
+sumAllNums(1, 2, 3, 4))
+// [1, 2, 3, 4]
+
+```
+
+```js
+// function declaration
+
+const sumAllNums = (...args) => {
+ let sum = 0
+ for (const element of args) {
+ sum += element
+ }
+ return sum
+}
+
+console.log(sumAllNums(1, 2, 3, 4)) // 10
+console.log(sumAllNums(10, 20, 13, 40, 10)) // 93
+console.log(sumAllNums(15, 20, 30, 25, 10, 33, 40)) // 173
+```
+
+### Anonymous Function
+
+Anonymous function or without name
+
+```js
+const anonymousFun = function() {
+ console.log(
+ 'I am an anonymous function and my value is stored in anonymousFun'
+ )
+}
+```
+
+### Expression Function
+
+Expression functions are anonymous functions. After we create a function without a name and we assign it to a variable. To return a value from the function we should call the variable. Look at the example below.
+
+```js
+
+// Function expression
+const square = function(n) {
+ return n * n
+}
+
+console.log(square(2)) // -> 4
+```
+
+### Self Invoking Functions
+
+Self invoking functions are anonymous functions which do not need to be called to return a value.
+
+```js
+(function(n) {
+ console.log(n * n)
+})(2) // 4, but instead of just printing if we want to return and store the data, we do as shown below
+
+let squaredNum = (function(n) {
+ return n * n
+})(10)
+
+console.log(squaredNum)
+```
+
+### Arrow Function
+
+Arrow function is an alternative to write a function, however function declaration and arrow function have some minor differences.
+
+Arrow function uses arrow instead of the keyword *function* to declare a function. Let us see both function declaration and arrow function.
+
+```js
+// This is how we write normal or declaration function
+// Let us change this declaration function to an arrow function
+function square(n) {
+ return n * n
+}
+
+console.log(square(2)) // 4
+
+const square = n => {
+ return n * n
+}
+
+console.log(square(2)) // -> 4
+
+// if we have only one line in the code block, it can be written as follows, explicit return
+const square = n => n * n // -> 4
+```
+
+```js
+const changeToUpperCase = arr => {
+ const newArr = []
+ for (const element of arr) {
+ newArr.push(element.toUpperCase())
+ }
+ return newArr
+}
+
+const countries = ['Finland', 'Sweden', 'Norway', 'Denmark', 'Iceland']
+console.log(changeToUpperCase(countries))
+
+// ["FINLAND", "SWEDEN", "NORWAY", "DENMARK", "ICELAND"]
+```
+
+```js
+const printFullName = (firstName, lastName) => {
+ return `${firstName} ${lastName}`
+}
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+The above function has only the return statement, therefore, we can explicitly return it as follows.
+
+```js
+const printFullName = (firstName, lastName) => `${firstName} ${lastName}`
+
+console.log(printFullName('Asabeneh', 'Yetayeh'))
+```
+
+### Function with default parameters
+
+Sometimes we pass default values to parameters, when we invoke the function if we do not pass an argument the default value will be used. Both function declaration and arrow function can have a default value or values.
+
+```js
+// syntax
+// Declaring a function
+function functionName(param = value) {
+ //codes
+}
+
+// Calling function
+functionName()
+functionName(arg)
+```
+
+**Example:**
+
+```js
+function greetings(name = 'Peter') {
+ let message = `${name}, welcome to 30 Days Of JavaScript!`
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+function generateFullName(firstName = 'Asabeneh', lastName = 'Yetayeh') {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+function calculateAge(birthYear, currentYear = 2019) {
+ let age = currentYear - birthYear
+ return age
+}
+
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+function weightOfObject(mass, gravity = 9.81) {
+ let weight = mass * gravity + ' N' // the value has to be changed to string first
+ return weight
+}
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 gravity at the surface of Earth
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // gravity at surface of Moon
+```
+
+Let us see how we write the above functions with arrow functions
+
+```js
+// syntax
+// Declaring a function
+const functionName = (param = value) => {
+ //codes
+}
+
+// Calling function
+functionName()
+functionName(arg)
+```
+
+**Example:**
+
+```js
+const greetings = (name = 'Peter') => {
+ let message = name + ', welcome to 30 Days Of JavaScript!'
+ return message
+}
+
+console.log(greetings())
+console.log(greetings('Asabeneh'))
+```
+
+```js
+const generateFullName = (firstName = 'Asabeneh', lastName = 'Yetayeh') => {
+ let space = ' '
+ let fullName = firstName + space + lastName
+ return fullName
+}
+
+console.log(generateFullName())
+console.log(generateFullName('David', 'Smith'))
+```
+
+```js
+
+const calculateAge = (birthYear, currentYear = 2019) => currentYear - birthYear
+console.log('Age: ', calculateAge(1819))
+```
+
+```js
+const weightOfObject = (mass, gravity = 9.81) => mass * gravity + ' N'
+
+console.log('Weight of an object in Newton: ', weightOfObject(100)) // 9.81 gravity at the surface of Earth
+console.log('Weight of an object in Newton: ', weightOfObject(100, 1.62)) // gravity at surface of Moon
+```
+
+### Function declaration versus Arrow function
+
+It ill be covered in other time
+
+🌕 You are a rising star, now you knew function . Now, you are super charged with the power of functions. You have just completed day 7 challenges and you are 7 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Exercises
+
+### Exercises: Level 1
+
+1. Declare a function _fullName_ and it print out your full name.
+2. Declare a function _fullName_ and now it takes firstName, lastName as a parameter and it returns your full - name.
+3. Declare a function _addNumbers_ and it takes two two parameters and it returns sum.
+4. An area of a rectangle is calculated as follows: _area = length x width_. Write a function which calculates _areaOfRectangle_.
+5. A perimeter of a rectangle is calculated as follows: _perimeter= 2x(length + width)_. Write a function which calculates _perimeterOfRectangle_.
+6. A volume of a rectangular prism is calculated as follows: _volume = length x width x height_. Write a function which calculates _volumeOfRectPrism_.
+7. Area of a circle is calculated as follows: _area = π x r x r_. Write a function which calculates _areaOfCircle_
+8. Circumference of a circle is calculated as follows: _circumference = 2πr_. Write a function which calculates _circumOfCircle_
+9. Density of a substance is calculated as follows:_density= mass/volume_. Write a function which calculates _density_.
+10. Speed is calculated by dividing the total distance covered by a moving object divided by the total amount of time taken. Write a function which calculates a speed of a moving object, _speed_.
+11. Weight of a substance is calculated as follows: _weight = mass x gravity_. Write a function which calculates _weight_.
+12. Temperature in oC can be converted to oF using this formula: _oF = (oC x 9/5) + 32_. Write a function which convert oC to oF _convertCelciusToFahrenheit_.
+13. Body mass index(BMI) is calculated as follows: _bmi = weight in Kg / (height x height) in m2_. Write a function which calculates _bmi_. BMI is used to broadly define different weight groups in adults 20 years old or older.Check if a person is _underweight, normal, overweight_ or _obese_ based the information given below.
+
+ - The same groups apply to both men and women.
+ - _Underweight_: BMI is less than 18.5
+ - _Normal weight_: BMI is 18.5 to 24.9
+ - _Overweight_: BMI is 25 to 29.9
+ - _Obese_: BMI is 30 or more
+
+14. Write a function called _checkSeason_, it takes a month parameter and returns the season:Autumn, Winter, Spring or Summer.
+15. Math.max returns its largest argument. Write a function findMax that takes three arguments and returns their maximum with out using Math.max method.
+
+ ```js
+ console.log(findMax(0, 10, 5))
+ 10
+ console.log(findMax(0, -10, -2))
+ 0
+ ```
+
+### Exercises: Level 2
+
+1. Linear equation is calculated as follows: _ax + by + c = 0_. Write a function which calculates value of a linear equation, _solveLinEquation_.
+1. Quadratic equation is calculated as follows: _ax2 + bx + c = 0_. Write a function which calculates value or values of a quadratic equation, _solveQuadEquation_.
+
+ ```js
+ console.log(solveQuadratic()) // {0}
+ console.log(solveQuadratic(1, 4, 4)) // {-2}
+ console.log(solveQuadratic(1, -1, -2)) // {2, -1}
+ console.log(solveQuadratic(1, 7, 12)) // {-3, -4}
+ console.log(solveQuadratic(1, 0, -4)) //{2, -2}
+ console.log(solveQuadratic(1, -1, 0)) //{1, 0}
+ ```
+
+1. Declare a function name _printArray_. It takes array as a parameter and it prints out each value of the array.
+1. Write a function name _showDateTime_ which shows time in this format: 08/01/2020 04:08 using the Date object.
+
+ ```sh
+ showDateTime()
+ 08/01/2020 04:08
+ ```
+
+1. Declare a function name _swapValues_. This function swaps value of x to y.
+
+ ```js
+ swapValues(3, 4) // x => 4, y=>3
+ swapValues(4, 5) // x = 5, y = 4
+ ```
+
+1. Declare a function name _reverseArray_. It takes array as a parameter and it returns the reverse of the array (don't use method).
+
+ ```js
+ console.log(reverseArray([1, 2, 3, 4, 5]))
+ //[5, 4, 3, 2, 1]
+ console.log(reverseArray(['A', 'B', 'C']))
+ //['C', 'B', 'A']
+ ```
+
+1. Declare a function name _capitalizeArray_. It takes array as a parameter and it returns the - capitalizedarray.
+1. Declare a function name _addItem_. It takes an item parameter and it returns an array after adding the item
+1. Declare a function name _removeItem_. It takes an index parameter and it returns an array after removing an item
+1. Declare a function name _sumOfNumbers_. It takes a number parameter and it adds all the numbers in that range.
+1. Declare a function name _sumOfOdds_. It takes a number parameter and it adds all the odd numbers in that - range.
+1. Declare a function name _sumOfEven_. It takes a number parameter and it adds all the even numbers in that - range.
+1. Declare a function name evensAndOdds . It takes a positive integer as parameter and it counts number of evens and odds in the number.
+
+ ```sh
+ evensAndOdds(100);
+ The number of odds are 50.
+ The number of evens are 51.
+ ```
+
+1. Write a function which takes any number of arguments and return the sum of the arguments
+
+ ```js
+ sum(1, 2, 3) // -> 6
+ sum(1, 2, 3, 4) // -> 10
+ ```
+
+1. Writ a function which generates a _randomUserIp_.
+1. Write a function which generates a _randomMacAddress_
+1. Declare a function name _randomHexaNumberGenerator_. When this function is called it generates a random hexadecimal number. The function return the hexadecimal number.
+
+ ```sh
+ console.log(randomHexaNumberGenerator());
+ '#ee33df'
+ ```
+
+1. Declare a function name _userIdGenerator_. When this function is called it generates seven character id. The function return the id.
+
+ ```sh
+ console.log(userIdGenerator());
+ 41XTDbE
+ ```
+
+### Exercises: Level 3
+
+1. Modify question number n . Declare a function name _userIdGeneratedByUser_. It doesn’t take any parameter but it takes two inputs using prompt(). One of the input is the number of characters and the second input is the number of ids which are supposed to be generated.
+
+ ```sh
+ userIdGeneratedByUser()
+ 'kcsy2
+ SMFYb
+ bWmeq
+ ZXOYh
+ 2Rgxf
+ '
+ userIdGeneratedByUser()
+ '1GCSgPLMaBAVQZ26
+ YD7eFwNQKNs7qXaT
+ ycArC5yrRupyG00S
+ UbGxOFI7UXSWAyKN
+ dIV0SSUTgAdKwStr
+ '
+ ```
+
+1. Write a function name _rgbColorGenerator_ and it generates rgb colors.
+
+ ```sh
+ rgbColorGenerator()
+ rgb(125,244,255)
+ ```
+
+1. Write a function **_arrayOfHexaColors_** which return any number of hexadecimal colors in an array.
+1. Write a function **_arrayOfRgbColors_** which return any number of RGB colors in an array.
+1. Write a function **_convertHexaToRgb_** which converts hexa color to rgb and it returns an rgb color.
+1. Write a function **_convertRgbToHexa_** which converts rgb to hexa color and it returns an hexa color.
+1. Write a function **_generateColors_** which can generate any number of hexa or rgb colors.
+
+ ```js
+ console.log(generateColors('hexa', 3)) // ['#a3e12f', '#03ed55', '#eb3d2b']
+ console.log(generateColors('hexa', 1)) // '#b334ef'
+ console.log(generateColors('rgb', 3)) // ['rgb(5, 55, 175)', 'rgb(50, 105, 100)', 'rgb(15, 26, 80)']
+ console.log(generateColors('rgb', 1)) // 'rgb(33,79, 176)'
+ ```
+
+1. Call your function _shuffleArray_, it takes an array as a parameter and it returns a shuffled array
+1. Call your function _factorial_, it takes a whole number as a parameter and it return a factorial of the number
+1. Call your function _isEmpty_, it takes a parameter and it checks if it is empty or not
+1. Call your function _sum_, it takes any number of arguments and it returns the sum.
+1. Write a function called _sumOfArrayItems_, it takes an array parameter and return the sum of all the items. Check if all the array items are number types. If not give return reasonable feedback.
+1. Write a function called _average_, it takes an array parameter and returns the average of the items. Check if all the array items are number types. If not give return reasonable feedback.
+1. Write a function called _modifyArray_ takes array as parameter and modifies the fifth item of the array and return the array. If the array length is less than five it return 'item not found'.
+
+ ```js
+ console.log(modifyArray(['Avocado', 'Tomato', 'Potato','Mango', 'Lemon','Carrot']);
+ ```
+
+ ```sh
+ ['Avocado', 'Tomato', 'Potato','Mango', 'LEMON', 'Carrot']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon','Microsoft', 'IBM']);
+ ```
+
+ ```sh
+ ['Google', 'Facebook','Apple', 'Amazon','MICROSOFT', 'IBM']
+ ```
+
+ ```js
+ console.log(modifyArray(['Google', 'Facebook','Apple', 'Amazon']);
+ ```
+
+ ```sh
+ 'Not Found'
+ ```
+
+1. Write a function called _isPrime_, which checks if a number is prime number.
+1. Write a functions which checks if all items are unique in the array.
+1. Write a function which checks if all the items of the array are the same data type.
+1. JavaScript variable name does not support special characters or symbols except \$ or \_. Write a function **isValidVariable** which check if a variable is valid or invalid variable.
+1. Write a function which returns array of seven random numbers in a range of 0-9. All the numbers must be unique.
+
+ ```js
+ sevenRandomNumbers()
+ [(1, 4, 5, 7, 9, 8, 0)]
+ ```
+
+1. Write a function called reverseCountries, it takes countries array and first it copy the array and returns the reverse of the original array
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 6](../06_Day_Loops/06_day_loops.md) | [Day 8 >>](../08_Day_Objects/08_day_objects.md)
\ No newline at end of file
diff --git a/ID/07_Day_Functions/07_day_starter/data/countries.js b/ID/07_Day_Functions/07_day_starter/data/countries.js
new file mode 100644
index 0000000..e57b005
--- /dev/null
+++ b/ID/07_Day_Functions/07_day_starter/data/countries.js
@@ -0,0 +1,195 @@
+const countries = [
+ 'Afghanistan',
+ 'Albania',
+ 'Algeria',
+ 'Andorra',
+ 'Angola',
+ 'Antigua and Barbuda',
+ 'Argentina',
+ 'Armenia',
+ 'Australia',
+ 'Austria',
+ 'Azerbaijan',
+ 'Bahamas',
+ 'Bahrain',
+ 'Bangladesh',
+ 'Barbados',
+ 'Belarus',
+ 'Belgium',
+ 'Belize',
+ 'Benin',
+ 'Bhutan',
+ 'Bolivia',
+ 'Bosnia and Herzegovina',
+ 'Botswana',
+ 'Brazil',
+ 'Brunei',
+ 'Bulgaria',
+ 'Burkina Faso',
+ 'Burundi',
+ 'Cambodia',
+ 'Cameroon',
+ 'Canada',
+ 'Cape Verde',
+ 'Central African Republic',
+ 'Chad',
+ 'Chile',
+ 'China',
+ 'Colombi',
+ 'Comoros',
+ 'Congo (Brazzaville)',
+ 'Congo',
+ 'Costa Rica',
+ "Cote d'Ivoire",
+ 'Croatia',
+ 'Cuba',
+ 'Cyprus',
+ 'Czech Republic',
+ 'Denmark',
+ 'Djibouti',
+ 'Dominica',
+ 'Dominican Republic',
+ 'East Timor (Timor Timur)',
+ 'Ecuador',
+ 'Egypt',
+ 'El Salvador',
+ 'Equatorial Guinea',
+ 'Eritrea',
+ 'Estonia',
+ 'Ethiopia',
+ 'Fiji',
+ 'Finland',
+ 'France',
+ 'Gabon',
+ 'Gambia, The',
+ 'Georgia',
+ 'Germany',
+ 'Ghana',
+ 'Greece',
+ 'Grenada',
+ 'Guatemala',
+ 'Guinea',
+ 'Guinea-Bissau',
+ 'Guyana',
+ 'Haiti',
+ 'Honduras',
+ 'Hungary',
+ 'Iceland',
+ 'India',
+ 'Indonesia',
+ 'Iran',
+ 'Iraq',
+ 'Ireland',
+ 'Israel',
+ 'Italy',
+ 'Jamaica',
+ 'Japan',
+ 'Jordan',
+ 'Kazakhstan',
+ 'Kenya',
+ 'Kiribati',
+ 'Korea, North',
+ 'Korea, South',
+ 'Kuwait',
+ 'Kyrgyzstan',
+ 'Laos',
+ 'Latvia',
+ 'Lebanon',
+ 'Lesotho',
+ 'Liberia',
+ 'Libya',
+ 'Liechtenstein',
+ 'Lithuania',
+ 'Luxembourg',
+ 'Macedonia',
+ 'Madagascar',
+ 'Malawi',
+ 'Malaysia',
+ 'Maldives',
+ 'Mali',
+ 'Malta',
+ 'Marshall Islands',
+ 'Mauritania',
+ 'Mauritius',
+ 'Mexico',
+ 'Micronesia',
+ 'Moldova',
+ 'Monaco',
+ 'Mongolia',
+ 'Morocco',
+ 'Mozambique',
+ 'Myanmar',
+ 'Namibia',
+ 'Nauru',
+ 'Nepal',
+ 'Netherlands',
+ 'New Zealand',
+ 'Nicaragua',
+ 'Niger',
+ 'Nigeria',
+ 'Norway',
+ 'Oman',
+ 'Pakistan',
+ 'Palau',
+ 'Panama',
+ 'Papua New Guinea',
+ 'Paraguay',
+ 'Peru',
+ 'Philippines',
+ 'Poland',
+ 'Portugal',
+ 'Qatar',
+ 'Romania',
+ 'Russia',
+ 'Rwanda',
+ 'Saint Kitts and Nevis',
+ 'Saint Lucia',
+ 'Saint Vincent',
+ 'Samoa',
+ 'San Marino',
+ 'Sao Tome and Principe',
+ 'Saudi Arabia',
+ 'Senegal',
+ 'Serbia and Montenegro',
+ 'Seychelles',
+ 'Sierra Leone',
+ 'Singapore',
+ 'Slovakia',
+ 'Slovenia',
+ 'Solomon Islands',
+ 'Somalia',
+ 'South Africa',
+ 'Spain',
+ 'Sri Lanka',
+ 'Sudan',
+ 'Suriname',
+ 'Swaziland',
+ 'Sweden',
+ 'Switzerland',
+ 'Syria',
+ 'Taiwan',
+ 'Tajikistan',
+ 'Tanzania',
+ 'Thailand',
+ 'Togo',
+ 'Tonga',
+ 'Trinidad and Tobago',
+ 'Tunisia',
+ 'Turkey',
+ 'Turkmenistan',
+ 'Tuvalu',
+ 'Uganda',
+ 'Ukraine',
+ 'United Arab Emirates',
+ 'United Kingdom',
+ 'United States',
+ 'Uruguay',
+ 'Uzbekistan',
+ 'Vanuatu',
+ 'Vatican City',
+ 'Venezuela',
+ 'Vietnam',
+ 'Yemen',
+ 'Zambia',
+ 'Zimbabwe'
+]
diff --git a/ID/07_Day_Functions/07_day_starter/index.html b/ID/07_Day_Functions/07_day_starter/index.html
new file mode 100644
index 0000000..f7eb67c
--- /dev/null
+++ b/ID/07_Day_Functions/07_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:07 Day
+
+
+
+
30DaysOfJavaScript:07 Day
+
Functions
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/07_Day_Functions/07_day_starter/scripts/main.js b/ID/07_Day_Functions/07_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/07_Day_Functions/07_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/08_Day_Objects/08_day_objects.md b/ID/08_Day_Objects/08_day_objects.md
new file mode 100644
index 0000000..de91f2f
--- /dev/null
+++ b/ID/08_Day_Objects/08_day_objects.md
@@ -0,0 +1,589 @@
+
+
+[<< Day 7](../07_Day_Functions/07_day_functions.md) | [Day 9 >>](../09_Day_Higher_order_functions/09_day_higher_order_functions.md)
+
+
+
+- [📔 Day 8](#-day-8)
+ - [Scope](#scope)
+ - [Window Scope](#window-scope)
+ - [Global scope](#global-scope)
+ - [Local scope](#local-scope)
+ - [📔 Object](#-object)
+ - [Creating an empty object](#creating-an-empty-object)
+ - [Creating an objecting with values](#creating-an-objecting-with-values)
+ - [Getting values from an object](#getting-values-from-an-object)
+ - [Creating object methods](#creating-object-methods)
+ - [Setting new key for an object](#setting-new-key-for-an-object)
+ - [Object Methods](#object-methods)
+ - [Getting object keys using Object.keys()](#getting-object-keys-using-objectkeys)
+ - [Getting object values using Object.values()](#getting-object-values-using-objectvalues)
+ - [Getting object keys and values using Object.entries()](#getting-object-keys-and-values-using-objectentries)
+ - [Checking properties using hasOwnProperty()](#checking-properties-using-hasownproperty)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📔 Day 8
+
+## Scope
+
+Variable is the fundamental part in programming. We declare variable to store different data types. To declare a variable we use the key word _var_, _let_ and _const_. A variable can declared at different scope. In this section we will see the scope, scope of variables when we use var or let.
+Variables scopes can be:
+
+- Window
+- Global
+- Local
+
+Variable can be declared globally or locally or window scope. We will see both global and local scope.
+Anything declared without let, var or const is scoped at window level.
+
+Let us image we have a scope.js file.
+
+### Window Scope
+
+Without using console.log() open your browser and check, you will see the value of a and b if you write a or b on the browser. That means a and b are already available in the window.
+
+```js
+//scope.js
+a = 'JavaScript' // is a window scope this found anywhere
+b = 10 // this is a window scope variable
+function letsLearnScope() {
+ console.log(a, b)
+ if (true) {
+ console.log(a, b)
+ }
+}
+console.log(a, b) // accessible
+```
+
+### Global scope
+
+A globally declared variable can be accessed every where in the same file. But the term global is relative. It can be global to the file or it can be global relative to some block of codes.
+
+```js
+//scope.js
+let a = 'JavaScript' // is a global scope it will be found anywhere in this file
+let b = 10 // is a global scope it will be found anywhere in this file
+function letsLearnScope() {
+ console.log(a, b) // JavaScript 10, accessible
+ if (true) {
+ let a = 'Python'
+ let b = 100
+ console.log(a, b) // Python 100
+ }
+ console.log(a, b)
+}
+letsLearnScope()
+console.log(a, b) // JavaScript 10, accessible
+```
+
+### Local scope
+
+A variable declared as local can be accessed only in certain block code.
+
+```js
+//scope.js
+let a = 'JavaScript' // is a global scope it will be found anywhere in this file
+let b = 10 // is a global scope it will be found anywhere in this file
+function letsLearnScope() {
+ console.log(a, b) // JavaScript 10, accessible
+ let c = 30
+ if (true) {
+ // we can access from the function and outside the function but
+ // variables declared inside the if will not be accessed outside the if block
+ let a = 'Python'
+ let b = 20
+ let d = 40
+ console.log(a, b, c) // Python 20 30
+ }
+ // we can not access c because c's scope is only the if block
+ console.log(a, b) // JavaScript 10
+}
+letsLearnScope()
+console.log(a, b) // JavaScript 10, accessible
+```
+
+Now, you have an understanding of scope. A variable declared with *var* only scoped to function but variable declared with *let* or *const* is block scope(function block, if block, loop etc). Block in JavaScript is a code in between two curly brackets ({}).
+
+```js
+//scope.js
+function letsLearnScope() {
+ var gravity = 9.81
+ console.log(gravity)
+
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+if (true){
+ var gravity = 9.81
+ console.log(gravity) // 9.81
+}
+console.log(gravity) // 9.81
+
+for(var i = 0; i < 3; i++){
+ console.log(i) // 1, 2, 3
+}
+console.log(i)
+
+```
+
+In ES6 and above there is *let* and *const*, so you will not suffer from the sneakiness of *var*. When we use *let* our variable is block scoped and it will not infect other parts of our code.
+
+```js
+//scope.js
+function letsLearnScope() {
+ // you can use let or const, but gravity is constant I prefer to use const
+ const gravity = 9.81
+ console.log(gravity)
+
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+if (true){
+ const gravity = 9.81
+ console.log(gravity) // 9.81
+}
+// console.log(gravity), Uncaught ReferenceError: gravity is not defined
+
+for(let i = 0; i < 3; i++){
+ console.log(i) // 1, 2, 3
+}
+// console.log(i), Uncaught ReferenceError: gravity is not defined
+
+```
+
+The scope *let* and *const* is the same. The difference is only reassigning. We can not change or reassign the value of const variable. I would strongly suggest you to use *let* and *const*, by using *let* and *const* you will writ clean code and avoid hard to debug mistakes. As a rule of thumb, you can use *let* for any value which change, *const* for any constant value, and for array, object, arrow function and function expression.
+
+## 📔 Object
+
+Everything can be an object and objects do have properties and properties have values, so an object is a key value pair. The order of the key is not reserved, or there is no order.
+To create an object literal, we use two curly brackets.
+
+### Creating an empty object
+
+An empty object
+
+```js
+const person = {}
+```
+
+### Creating an objecting with values
+
+Now, the person object has firstName, lastName, age, location, skills and isMarried properties. The value of properties or keys could be a string, number, boolean, an object, null, undefined or a function.
+
+Let us see some examples of object. Each key has a value in the object.
+
+```js
+const rectangle = {
+ length: 20,
+ width: 20
+}
+console.log(rectangle) // {length: 20, width: 20}
+
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ isMarried: true
+}
+console.log(person)
+```
+
+### Getting values from an object
+
+We can access values of object using two methods:
+
+- using . followed by key name if the key-name is a one word
+- using square bracket and a quote
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName}${this.lastName}`
+ },
+ 'phone number': '+3584545454545'
+}
+
+// accessing values using .
+console.log(person.firstName)
+console.log(person.lastName)
+console.log(person.age)
+console.log(person.location)
+
+// value can be accessed using square bracket and key name
+console.log(person['firstName'])
+console.log(person['lastName'])
+console.log(person['age'])
+console.log(person['age'])
+console.log(person['location'])
+
+// for instance to access the phone number we only use the square bracket method
+console.log(person['phone number'])
+```
+
+### Creating object methods
+
+Now, the person object has getFullName properties. The getFullName is function inside the person object and we call it an object method. The _this_ key word refers to the object itself. We can use the word _this_ to access the values of different properties of the object. We can not use an arrow function as object method because the word this refers to the window inside an arrow function instead of the object itself. Example of object:
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName} ${this.lastName}`
+ }
+}
+
+console.log(person.getFullName())
+// Asabeneh Yetayeh
+```
+
+### Setting new key for an object
+
+An object is a mutable data structure and we can modify the content of an object after it gets created.
+
+Setting a new keys in an object
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: [
+ 'HTML',
+ 'CSS',
+ 'JavaScript',
+ 'React',
+ 'Node',
+ 'MongoDB',
+ 'Python',
+ 'D3.js'
+ ],
+ getFullName: function() {
+ return `${this.firstName} ${this.lastName}`
+ }
+}
+person.nationality = 'Ethiopian'
+person.country = 'Finland'
+person.title = 'teacher'
+person.skills.push('Meteor')
+person.skills.push('SasS')
+person.isMarried = true
+
+person.getPersonInfo = function() {
+ let skillsWithoutLastSkill = this.skills
+ .splice(0, this.skills.length - 1)
+ .join(', ')
+ let lastSkill = this.skills.splice(this.skills.length - 1)[0]
+
+ let skills = `${skillsWithoutLastSkill}, and ${lastSkill}`
+ let fullName = this.getFullName()
+ let statement = `${fullName} is a ${this.title}.\nHe lives in ${this.country}.\nHe teaches ${skills}.`
+ return statement
+}
+console.log(person)
+console.log(person.getPersonInfo())
+```
+
+```sh
+Asabeneh Yetayeh is a teacher.
+He lives in Finland.
+He teaches HTML, CSS, JavaScript, React, Node, MongoDB, Python, D3.js, Meteor, and SasS.
+```
+
+### Object Methods
+
+There are different methods to manipulate an object. Let us see some of the available methods.
+
+_Object.assign_: To copy an object without modifying the original object
+
+```js
+const person = {
+ firstName: 'Asabeneh',
+ age: 250,
+ country: 'Finland',
+ city:'Helsinki',
+ skills: ['HTML', 'CSS', 'JS'],
+ title: 'teacher',
+ address: {
+ street: 'Heitamienkatu 16',
+ pobox: 2002,
+ city: 'Helsinki'
+ },
+ getPersonInfo: function() {
+ return `I am ${this.firstName} and I live in ${this.city}, ${this.country}. I am ${this.age}.`
+ }
+}
+
+//Object methods: Object.assign, Object.keys, Object.values, Object.entries
+//hasOwnProperty
+
+const copyPerson = Object.assign({}, person)
+console.log(copyPerson)
+```
+
+#### Getting object keys using Object.keys()
+
+_Object.keys_: To get the keys or properties of an object as an array
+
+```js
+const keys = Object.keys(copyPerson)
+console.log(keys) //['name', 'age', 'country', 'skills', 'address', 'getPersonInfo']
+const address = Object.keys(copyPerson.address)
+console.log(address) //['street', 'pobox', 'city']
+```
+
+#### Getting object values using Object.values()
+
+_Object.values_:To get values of an object as an array
+
+```js
+const values = Object.values(copyPerson)
+console.log(values)
+```
+
+#### Getting object keys and values using Object.entries()
+
+_Object.entries_:To get the keys and values in an array
+
+```js
+const entries = Object.entries(copyPerson)
+console.log(entries)
+```
+
+#### Checking properties using hasOwnProperty()
+
+_hasOwnProperty_: To check if a specific key or property exist in an object
+
+```js
+console.log(copyPerson.hasOwnProperty('name'))
+console.log(copyPerson.hasOwnProperty('score'))
+```
+
+🌕 You are astonishing. Now, you are super charged with the power of objects. You have just completed day 8 challenges and you are 8 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Exercises
+
+### Exercises: Level 1
+
+1. Create an empty object called dog
+1. Print the the dog object on the console
+1. Add name, legs, color, age and bark properties for the dog object. The bark property is a method which return _woof woof_
+1. Get name, legs, color, age and bark value from the dog object
+1. Set new properties the dog object: breed, getDogInfo
+
+### Exercises: Level 2
+
+1. Find the person who has many skills in the users object.
+1. 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
+ }
+ }```
+
+1. Find people who are MERN stack developer from the users object
+1. Set your name in the users object without modifying the original users object
+1. Get all keys or properties of users object
+1. Get all the values of users object
+1. Use the countries object to print a country name, capital, populations and languages.
+
+### 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.
+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.
+
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 7](../07_Day_Functions/07_day_functions.md) | [Day 9 >>](../09_Day_Higher_order_functions/09_day_higher_order_functions.md)
diff --git a/ID/08_Day_Objects/08_day_starter/data/countries_data.js b/ID/08_Day_Objects/08_day_starter/data/countries_data.js
new file mode 100644
index 0000000..92acddd
--- /dev/null
+++ b/ID/08_Day_Objects/08_day_starter/data/countries_data.js
@@ -0,0 +1,2013 @@
+const countries = [
+ {
+ name: 'Afghanistan',
+ capital: 'Kabul',
+ languages: ['Pashto', 'Uzbek', 'Turkmen'],
+ population: 27657145,
+ flag: 'https://restcountries.eu/data/afg.svg',
+ currency: 'Afghan afghani'
+ },
+ {
+ name: 'Åland Islands',
+ capital: 'Mariehamn',
+ languages: ['Swedish'],
+ population: 28875,
+ flag: 'https://restcountries.eu/data/ala.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Albania',
+ capital: 'Tirana',
+ languages: ['Albanian'],
+ population: 2886026,
+ flag: 'https://restcountries.eu/data/alb.svg',
+ currency: 'Albanian lek'
+ },
+ {
+ name: 'Algeria',
+ capital: 'Algiers',
+ languages: ['Arabic'],
+ population: 40400000,
+ flag: 'https://restcountries.eu/data/dza.svg',
+ currency: 'Algerian dinar'
+ },
+ {
+ name: 'American Samoa',
+ capital: 'Pago Pago',
+ languages: ['English', 'Samoan'],
+ population: 57100,
+ flag: 'https://restcountries.eu/data/asm.svg',
+ currency: 'United State Dollar'
+ },
+ {
+ name: 'Andorra',
+ capital: 'Andorra la Vella',
+ languages: ['Catalan'],
+ population: 78014,
+ flag: 'https://restcountries.eu/data/and.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Angola',
+ capital: 'Luanda',
+ languages: ['Portuguese'],
+ population: 25868000,
+ flag: 'https://restcountries.eu/data/ago.svg',
+ currency: 'Angolan kwanza'
+ },
+ {
+ name: 'Anguilla',
+ capital: 'The Valley',
+ languages: ['English'],
+ population: 13452,
+ flag: 'https://restcountries.eu/data/aia.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Antarctica',
+ capital: '',
+ languages: ['English', 'Russian'],
+ population: 1000,
+ flag: 'https://restcountries.eu/data/ata.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Antigua and Barbuda',
+ capital: "Saint John's",
+ languages: ['English'],
+ population: 86295,
+ flag: 'https://restcountries.eu/data/atg.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Argentina',
+ capital: 'Buenos Aires',
+ languages: ['Spanish', 'Guaraní'],
+ population: 43590400,
+ flag: 'https://restcountries.eu/data/arg.svg',
+ currency: 'Argentine peso'
+ },
+ {
+ name: 'Armenia',
+ capital: 'Yerevan',
+ languages: ['Armenian', 'Russian'],
+ population: 2994400,
+ flag: 'https://restcountries.eu/data/arm.svg',
+ currency: 'Armenian dram'
+ },
+ {
+ name: 'Aruba',
+ capital: 'Oranjestad',
+ languages: ['Dutch', '(Eastern) Punjabi'],
+ population: 107394,
+ flag: 'https://restcountries.eu/data/abw.svg',
+ currency: 'Aruban florin'
+ },
+ {
+ name: 'Australia',
+ capital: 'Canberra',
+ languages: ['English'],
+ population: 24117360,
+ flag: 'https://restcountries.eu/data/aus.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Austria',
+ capital: 'Vienna',
+ languages: ['German'],
+ population: 8725931,
+ flag: 'https://restcountries.eu/data/aut.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Azerbaijan',
+ capital: 'Baku',
+ languages: ['Azerbaijani'],
+ population: 9730500,
+ flag: 'https://restcountries.eu/data/aze.svg',
+ currency: 'Azerbaijani manat'
+ },
+ {
+ name: 'Bahamas',
+ capital: 'Nassau',
+ languages: ['English'],
+ population: 378040,
+ flag: 'https://restcountries.eu/data/bhs.svg',
+ currency: 'Bahamian dollar'
+ },
+ {
+ name: 'Bahrain',
+ capital: 'Manama',
+ languages: ['Arabic'],
+ population: 1404900,
+ flag: 'https://restcountries.eu/data/bhr.svg',
+ currency: 'Bahraini dinar'
+ },
+ {
+ name: 'Bangladesh',
+ capital: 'Dhaka',
+ languages: ['Bengali'],
+ population: 161006790,
+ flag: 'https://restcountries.eu/data/bgd.svg',
+ currency: 'Bangladeshi taka'
+ },
+ {
+ name: 'Barbados',
+ capital: 'Bridgetown',
+ languages: ['English'],
+ population: 285000,
+ flag: 'https://restcountries.eu/data/brb.svg',
+ currency: 'Barbadian dollar'
+ },
+ {
+ name: 'Belarus',
+ capital: 'Minsk',
+ languages: ['Belarusian', 'Russian'],
+ population: 9498700,
+ flag: 'https://restcountries.eu/data/blr.svg',
+ currency: 'New Belarusian ruble'
+ },
+ {
+ name: 'Belgium',
+ capital: 'Brussels',
+ languages: ['Dutch', 'French', 'German'],
+ population: 11319511,
+ flag: 'https://restcountries.eu/data/bel.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Belize',
+ capital: 'Belmopan',
+ languages: ['English', 'Spanish'],
+ population: 370300,
+ flag: 'https://restcountries.eu/data/blz.svg',
+ currency: 'Belize dollar'
+ },
+ {
+ name: 'Benin',
+ capital: 'Porto-Novo',
+ languages: ['French'],
+ population: 10653654,
+ flag: 'https://restcountries.eu/data/ben.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Bermuda',
+ capital: 'Hamilton',
+ languages: ['English'],
+ population: 61954,
+ flag: 'https://restcountries.eu/data/bmu.svg',
+ currency: 'Bermudian dollar'
+ },
+ {
+ name: 'Bhutan',
+ capital: 'Thimphu',
+ languages: ['Dzongkha'],
+ population: 775620,
+ flag: 'https://restcountries.eu/data/btn.svg',
+ currency: 'Bhutanese ngultrum'
+ },
+ {
+ name: 'Bolivia (Plurinational State of)',
+ capital: 'Sucre',
+ languages: ['Spanish', 'Aymara', 'Quechua'],
+ population: 10985059,
+ flag: 'https://restcountries.eu/data/bol.svg',
+ currency: 'Bolivian boliviano'
+ },
+ {
+ name: 'Bonaire, Sint Eustatius and Saba',
+ capital: 'Kralendijk',
+ languages: ['Dutch'],
+ population: 17408,
+ flag: 'https://restcountries.eu/data/bes.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Bosnia and Herzegovina',
+ capital: 'Sarajevo',
+ languages: ['Bosnian', 'Croatian', 'Serbian'],
+ population: 3531159,
+ flag: 'https://restcountries.eu/data/bih.svg',
+ currency: 'Bosnia and Herzegovina convertible mark'
+ },
+ {
+ name: 'Botswana',
+ capital: 'Gaborone',
+ languages: ['English', 'Tswana'],
+ population: 2141206,
+ flag: 'https://restcountries.eu/data/bwa.svg',
+ currency: 'Botswana pula'
+ },
+ {
+ name: 'Bouvet Island',
+ capital: '',
+ languages: ['Norwegian', 'Norwegian Bokmål', 'Norwegian Nynorsk'],
+ population: 0,
+ flag: 'https://restcountries.eu/data/bvt.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Brazil',
+ capital: 'Brasília',
+ languages: ['Portuguese'],
+ population: 206135893,
+ flag: 'https://restcountries.eu/data/bra.svg',
+ currency: 'Brazilian real'
+ },
+ {
+ name: 'British Indian Ocean Territory',
+ capital: 'Diego Garcia',
+ languages: ['English'],
+ population: 3000,
+ flag: 'https://restcountries.eu/data/iot.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'United States Minor Outlying Islands',
+ capital: '',
+ languages: ['English'],
+ population: 300,
+ flag: 'https://restcountries.eu/data/umi.svg',
+ currency: 'United States Dollar'
+ },
+ {
+ name: 'Virgin Islands (British)',
+ capital: 'Road Town',
+ languages: ['English'],
+ population: 28514,
+ flag: 'https://restcountries.eu/data/vgb.svg',
+ currency: '[D]'
+ },
+ {
+ name: 'Virgin Islands (U.S.)',
+ capital: 'Charlotte Amalie',
+ languages: ['English'],
+ population: 114743,
+ flag: 'https://restcountries.eu/data/vir.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Brunei Darussalam',
+ capital: 'Bandar Seri Begawan',
+ languages: ['Malay'],
+ population: 411900,
+ flag: 'https://restcountries.eu/data/brn.svg',
+ currency: 'Brunei dollar'
+ },
+ {
+ name: 'Bulgaria',
+ capital: 'Sofia',
+ languages: ['Bulgarian'],
+ population: 7153784,
+ flag: 'https://restcountries.eu/data/bgr.svg',
+ currency: 'Bulgarian lev'
+ },
+ {
+ name: 'Burkina Faso',
+ capital: 'Ouagadougou',
+ languages: ['French', 'Fula'],
+ population: 19034397,
+ flag: 'https://restcountries.eu/data/bfa.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Burundi',
+ capital: 'Bujumbura',
+ languages: ['French', 'Kirundi'],
+ population: 10114505,
+ flag: 'https://restcountries.eu/data/bdi.svg',
+ currency: 'Burundian franc'
+ },
+ {
+ name: 'Cambodia',
+ capital: 'Phnom Penh',
+ languages: ['Khmer'],
+ population: 15626444,
+ flag: 'https://restcountries.eu/data/khm.svg',
+ currency: 'Cambodian riel'
+ },
+ {
+ name: 'Cameroon',
+ capital: 'Yaoundé',
+ languages: ['English', 'French'],
+ population: 22709892,
+ flag: 'https://restcountries.eu/data/cmr.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Canada',
+ capital: 'Ottawa',
+ languages: ['English', 'French'],
+ population: 36155487,
+ flag: 'https://restcountries.eu/data/can.svg',
+ currency: 'Canadian dollar'
+ },
+ {
+ name: 'Cabo Verde',
+ capital: 'Praia',
+ languages: ['Portuguese'],
+ population: 531239,
+ flag: 'https://restcountries.eu/data/cpv.svg',
+ currency: 'Cape Verdean escudo'
+ },
+ {
+ name: 'Cayman Islands',
+ capital: 'George Town',
+ languages: ['English'],
+ population: 58238,
+ flag: 'https://restcountries.eu/data/cym.svg',
+ currency: 'Cayman Islands dollar'
+ },
+ {
+ name: 'Central African Republic',
+ capital: 'Bangui',
+ languages: ['French', 'Sango'],
+ population: 4998000,
+ flag: 'https://restcountries.eu/data/caf.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Chad',
+ capital: "N'Djamena",
+ languages: ['French', 'Arabic'],
+ population: 14497000,
+ flag: 'https://restcountries.eu/data/tcd.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Chile',
+ capital: 'Santiago',
+ languages: ['Spanish'],
+ population: 18191900,
+ flag: 'https://restcountries.eu/data/chl.svg',
+ currency: 'Chilean peso'
+ },
+ {
+ name: 'China',
+ capital: 'Beijing',
+ languages: ['Chinese'],
+ population: 1377422166,
+ flag: 'https://restcountries.eu/data/chn.svg',
+ currency: 'Chinese yuan'
+ },
+ {
+ name: 'Christmas Island',
+ capital: 'Flying Fish Cove',
+ languages: ['English'],
+ population: 2072,
+ flag: 'https://restcountries.eu/data/cxr.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Cocos (Keeling) Islands',
+ capital: 'West Island',
+ languages: ['English'],
+ population: 550,
+ flag: 'https://restcountries.eu/data/cck.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Colombia',
+ capital: 'Bogotá',
+ languages: ['Spanish'],
+ population: 48759958,
+ flag: 'https://restcountries.eu/data/col.svg',
+ currency: 'Colombian peso'
+ },
+ {
+ name: 'Comoros',
+ capital: 'Moroni',
+ languages: ['Arabic', 'French'],
+ population: 806153,
+ flag: 'https://restcountries.eu/data/com.svg',
+ currency: 'Comorian franc'
+ },
+ {
+ name: 'Congo',
+ capital: 'Brazzaville',
+ languages: ['French', 'Lingala'],
+ population: 4741000,
+ flag: 'https://restcountries.eu/data/cog.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Congo (Democratic Republic of the)',
+ capital: 'Kinshasa',
+ languages: ['French', 'Lingala', 'Kongo', 'Swahili', 'Luba-Katanga'],
+ population: 85026000,
+ flag: 'https://restcountries.eu/data/cod.svg',
+ currency: 'Congolese franc'
+ },
+ {
+ name: 'Cook Islands',
+ capital: 'Avarua',
+ languages: ['English'],
+ population: 18100,
+ flag: 'https://restcountries.eu/data/cok.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Costa Rica',
+ capital: 'San José',
+ languages: ['Spanish'],
+ population: 4890379,
+ flag: 'https://restcountries.eu/data/cri.svg',
+ currency: 'Costa Rican colón'
+ },
+ {
+ name: 'Croatia',
+ capital: 'Zagreb',
+ languages: ['Croatian'],
+ population: 4190669,
+ flag: 'https://restcountries.eu/data/hrv.svg',
+ currency: 'Croatian kuna'
+ },
+ {
+ name: 'Cuba',
+ capital: 'Havana',
+ languages: ['Spanish'],
+ population: 11239004,
+ flag: 'https://restcountries.eu/data/cub.svg',
+ currency: 'Cuban convertible peso'
+ },
+ {
+ name: 'Curaçao',
+ capital: 'Willemstad',
+ languages: ['Dutch', '(Eastern) Punjabi', 'English'],
+ population: 154843,
+ flag: 'https://restcountries.eu/data/cuw.svg',
+ currency: 'Netherlands Antillean guilder'
+ },
+ {
+ name: 'Cyprus',
+ capital: 'Nicosia',
+ languages: ['Greek (modern)', 'Turkish', 'Armenian'],
+ population: 847000,
+ flag: 'https://restcountries.eu/data/cyp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Czech Republic',
+ capital: 'Prague',
+ languages: ['Czech', 'Slovak'],
+ population: 10558524,
+ flag: 'https://restcountries.eu/data/cze.svg',
+ currency: 'Czech koruna'
+ },
+ {
+ name: 'Denmark',
+ capital: 'Copenhagen',
+ languages: ['Danish'],
+ population: 5717014,
+ flag: 'https://restcountries.eu/data/dnk.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Djibouti',
+ capital: 'Djibouti',
+ languages: ['French', 'Arabic'],
+ population: 900000,
+ flag: 'https://restcountries.eu/data/dji.svg',
+ currency: 'Djiboutian franc'
+ },
+ {
+ name: 'Dominica',
+ capital: 'Roseau',
+ languages: ['English'],
+ population: 71293,
+ flag: 'https://restcountries.eu/data/dma.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Dominican Republic',
+ capital: 'Santo Domingo',
+ languages: ['Spanish'],
+ population: 10075045,
+ flag: 'https://restcountries.eu/data/dom.svg',
+ currency: 'Dominican peso'
+ },
+ {
+ name: 'Ecuador',
+ capital: 'Quito',
+ languages: ['Spanish'],
+ population: 16545799,
+ flag: 'https://restcountries.eu/data/ecu.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Egypt',
+ capital: 'Cairo',
+ languages: ['Arabic'],
+ population: 91290000,
+ flag: 'https://restcountries.eu/data/egy.svg',
+ currency: 'Egyptian pound'
+ },
+ {
+ name: 'El Salvador',
+ capital: 'San Salvador',
+ languages: ['Spanish'],
+ population: 6520675,
+ flag: 'https://restcountries.eu/data/slv.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Equatorial Guinea',
+ capital: 'Malabo',
+ languages: ['Spanish', 'French'],
+ population: 1222442,
+ flag: 'https://restcountries.eu/data/gnq.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Eritrea',
+ capital: 'Asmara',
+ languages: ['Tigrinya', 'Arabic', 'English'],
+ population: 5352000,
+ flag: 'https://restcountries.eu/data/eri.svg',
+ currency: 'Eritrean nakfa'
+ },
+ {
+ name: 'Estonia',
+ capital: 'Tallinn',
+ languages: ['Estonian'],
+ population: 1315944,
+ flag: 'https://restcountries.eu/data/est.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Ethiopia',
+ capital: 'Addis Ababa',
+ languages: ['Amharic'],
+ population: 92206005,
+ flag: 'https://restcountries.eu/data/eth.svg',
+ currency: 'Ethiopian birr'
+ },
+ {
+ name: 'Falkland Islands (Malvinas)',
+ capital: 'Stanley',
+ languages: ['English'],
+ population: 2563,
+ flag: 'https://restcountries.eu/data/flk.svg',
+ currency: 'Falkland Islands pound'
+ },
+ {
+ name: 'Faroe Islands',
+ capital: 'Tórshavn',
+ languages: ['Faroese'],
+ population: 49376,
+ flag: 'https://restcountries.eu/data/fro.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Fiji',
+ capital: 'Suva',
+ languages: ['English', 'Fijian', 'Hindi', 'Urdu'],
+ population: 867000,
+ flag: 'https://restcountries.eu/data/fji.svg',
+ currency: 'Fijian dollar'
+ },
+ {
+ name: 'Finland',
+ capital: 'Helsinki',
+ languages: ['Finnish', 'Swedish'],
+ population: 5491817,
+ flag: 'https://restcountries.eu/data/fin.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'France',
+ capital: 'Paris',
+ languages: ['French'],
+ population: 66710000,
+ flag: 'https://restcountries.eu/data/fra.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'French Guiana',
+ capital: 'Cayenne',
+ languages: ['French'],
+ population: 254541,
+ flag: 'https://restcountries.eu/data/guf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'French Polynesia',
+ capital: 'Papeetē',
+ languages: ['French'],
+ population: 271800,
+ flag: 'https://restcountries.eu/data/pyf.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'French Southern Territories',
+ capital: 'Port-aux-Français',
+ languages: ['French'],
+ population: 140,
+ flag: 'https://restcountries.eu/data/atf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Gabon',
+ capital: 'Libreville',
+ languages: ['French'],
+ population: 1802278,
+ flag: 'https://restcountries.eu/data/gab.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Gambia',
+ capital: 'Banjul',
+ languages: ['English'],
+ population: 1882450,
+ flag: 'https://restcountries.eu/data/gmb.svg',
+ currency: 'Gambian dalasi'
+ },
+ {
+ name: 'Georgia',
+ capital: 'Tbilisi',
+ languages: ['Georgian'],
+ population: 3720400,
+ flag: 'https://restcountries.eu/data/geo.svg',
+ currency: 'Georgian Lari'
+ },
+ {
+ name: 'Germany',
+ capital: 'Berlin',
+ languages: ['German'],
+ population: 81770900,
+ flag: 'https://restcountries.eu/data/deu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Ghana',
+ capital: 'Accra',
+ languages: ['English'],
+ population: 27670174,
+ flag: 'https://restcountries.eu/data/gha.svg',
+ currency: 'Ghanaian cedi'
+ },
+ {
+ name: 'Gibraltar',
+ capital: 'Gibraltar',
+ languages: ['English'],
+ population: 33140,
+ flag: 'https://restcountries.eu/data/gib.svg',
+ currency: 'Gibraltar pound'
+ },
+ {
+ name: 'Greece',
+ capital: 'Athens',
+ languages: ['Greek (modern)'],
+ population: 10858018,
+ flag: 'https://restcountries.eu/data/grc.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Greenland',
+ capital: 'Nuuk',
+ languages: ['Kalaallisut'],
+ population: 55847,
+ flag: 'https://restcountries.eu/data/grl.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Grenada',
+ capital: "St. George's",
+ languages: ['English'],
+ population: 103328,
+ flag: 'https://restcountries.eu/data/grd.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Guadeloupe',
+ capital: 'Basse-Terre',
+ languages: ['French'],
+ population: 400132,
+ flag: 'https://restcountries.eu/data/glp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Guam',
+ capital: 'Hagåtña',
+ languages: ['English', 'Chamorro', 'Spanish'],
+ population: 184200,
+ flag: 'https://restcountries.eu/data/gum.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Guatemala',
+ capital: 'Guatemala City',
+ languages: ['Spanish'],
+ population: 16176133,
+ flag: 'https://restcountries.eu/data/gtm.svg',
+ currency: 'Guatemalan quetzal'
+ },
+ {
+ name: 'Guernsey',
+ capital: 'St. Peter Port',
+ languages: ['English', 'French'],
+ population: 62999,
+ flag: 'https://restcountries.eu/data/ggy.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Guinea',
+ capital: 'Conakry',
+ languages: ['French', 'Fula'],
+ population: 12947000,
+ flag: 'https://restcountries.eu/data/gin.svg',
+ currency: 'Guinean franc'
+ },
+ {
+ name: 'Guinea-Bissau',
+ capital: 'Bissau',
+ languages: ['Portuguese'],
+ population: 1547777,
+ flag: 'https://restcountries.eu/data/gnb.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Guyana',
+ capital: 'Georgetown',
+ languages: ['English'],
+ population: 746900,
+ flag: 'https://restcountries.eu/data/guy.svg',
+ currency: 'Guyanese dollar'
+ },
+ {
+ name: 'Haiti',
+ capital: 'Port-au-Prince',
+ languages: ['French', 'Haitian'],
+ population: 11078033,
+ flag: 'https://restcountries.eu/data/hti.svg',
+ currency: 'Haitian gourde'
+ },
+ {
+ name: 'Heard Island and McDonald Islands',
+ capital: '',
+ languages: ['English'],
+ population: 0,
+ flag: 'https://restcountries.eu/data/hmd.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Holy See',
+ capital: 'Rome',
+ languages: ['Latin', 'Italian', 'French', 'German'],
+ population: 451,
+ flag: 'https://restcountries.eu/data/vat.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Honduras',
+ capital: 'Tegucigalpa',
+ languages: ['Spanish'],
+ population: 8576532,
+ flag: 'https://restcountries.eu/data/hnd.svg',
+ currency: 'Honduran lempira'
+ },
+ {
+ name: 'Hong Kong',
+ capital: 'City of Victoria',
+ languages: ['English', 'Chinese'],
+ population: 7324300,
+ flag: 'https://restcountries.eu/data/hkg.svg',
+ currency: 'Hong Kong dollar'
+ },
+ {
+ name: 'Hungary',
+ capital: 'Budapest',
+ languages: ['Hungarian'],
+ population: 9823000,
+ flag: 'https://restcountries.eu/data/hun.svg',
+ currency: 'Hungarian forint'
+ },
+ {
+ name: 'Iceland',
+ capital: 'Reykjavík',
+ languages: ['Icelandic'],
+ population: 334300,
+ flag: 'https://restcountries.eu/data/isl.svg',
+ currency: 'Icelandic króna'
+ },
+ {
+ name: 'India',
+ capital: 'New Delhi',
+ languages: ['Hindi', 'English'],
+ population: 1295210000,
+ flag: 'https://restcountries.eu/data/ind.svg',
+ currency: 'Indian rupee'
+ },
+ {
+ name: 'Indonesia',
+ capital: 'Jakarta',
+ languages: ['Indonesian'],
+ population: 258705000,
+ flag: 'https://restcountries.eu/data/idn.svg',
+ currency: 'Indonesian rupiah'
+ },
+ {
+ name: "Côte d'Ivoire",
+ capital: 'Yamoussoukro',
+ languages: ['French'],
+ population: 22671331,
+ flag: 'https://restcountries.eu/data/civ.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Iran (Islamic Republic of)',
+ capital: 'Tehran',
+ languages: ['Persian (Farsi)'],
+ population: 79369900,
+ flag: 'https://restcountries.eu/data/irn.svg',
+ currency: 'Iranian rial'
+ },
+ {
+ name: 'Iraq',
+ capital: 'Baghdad',
+ languages: ['Arabic', 'Kurdish'],
+ population: 37883543,
+ flag: 'https://restcountries.eu/data/irq.svg',
+ currency: 'Iraqi dinar'
+ },
+ {
+ name: 'Ireland',
+ capital: 'Dublin',
+ languages: ['Irish', 'English'],
+ population: 6378000,
+ flag: 'https://restcountries.eu/data/irl.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Isle of Man',
+ capital: 'Douglas',
+ languages: ['English', 'Manx'],
+ population: 84497,
+ flag: 'https://restcountries.eu/data/imn.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Israel',
+ capital: 'Jerusalem',
+ languages: ['Hebrew (modern)', 'Arabic'],
+ population: 8527400,
+ flag: 'https://restcountries.eu/data/isr.svg',
+ currency: 'Israeli new shekel'
+ },
+ {
+ name: 'Italy',
+ capital: 'Rome',
+ languages: ['Italian'],
+ population: 60665551,
+ flag: 'https://restcountries.eu/data/ita.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Jamaica',
+ capital: 'Kingston',
+ languages: ['English'],
+ population: 2723246,
+ flag: 'https://restcountries.eu/data/jam.svg',
+ currency: 'Jamaican dollar'
+ },
+ {
+ name: 'Japan',
+ capital: 'Tokyo',
+ languages: ['Japanese'],
+ population: 126960000,
+ flag: 'https://restcountries.eu/data/jpn.svg',
+ currency: 'Japanese yen'
+ },
+ {
+ name: 'Jersey',
+ capital: 'Saint Helier',
+ languages: ['English', 'French'],
+ population: 100800,
+ flag: 'https://restcountries.eu/data/jey.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Jordan',
+ capital: 'Amman',
+ languages: ['Arabic'],
+ population: 9531712,
+ flag: 'https://restcountries.eu/data/jor.svg',
+ currency: 'Jordanian dinar'
+ },
+ {
+ name: 'Kazakhstan',
+ capital: 'Astana',
+ languages: ['Kazakh', 'Russian'],
+ population: 17753200,
+ flag: 'https://restcountries.eu/data/kaz.svg',
+ currency: 'Kazakhstani tenge'
+ },
+ {
+ name: 'Kenya',
+ capital: 'Nairobi',
+ languages: ['English', 'Swahili'],
+ population: 47251000,
+ flag: 'https://restcountries.eu/data/ken.svg',
+ currency: 'Kenyan shilling'
+ },
+ {
+ name: 'Kiribati',
+ capital: 'South Tarawa',
+ languages: ['English'],
+ population: 113400,
+ flag: 'https://restcountries.eu/data/kir.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Kuwait',
+ capital: 'Kuwait City',
+ languages: ['Arabic'],
+ population: 4183658,
+ flag: 'https://restcountries.eu/data/kwt.svg',
+ currency: 'Kuwaiti dinar'
+ },
+ {
+ name: 'Kyrgyzstan',
+ capital: 'Bishkek',
+ languages: ['Kyrgyz', 'Russian'],
+ population: 6047800,
+ flag: 'https://restcountries.eu/data/kgz.svg',
+ currency: 'Kyrgyzstani som'
+ },
+ {
+ name: "Lao People's Democratic Republic",
+ capital: 'Vientiane',
+ languages: ['Lao'],
+ population: 6492400,
+ flag: 'https://restcountries.eu/data/lao.svg',
+ currency: 'Lao kip'
+ },
+ {
+ name: 'Latvia',
+ capital: 'Riga',
+ languages: ['Latvian'],
+ population: 1961600,
+ flag: 'https://restcountries.eu/data/lva.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Lebanon',
+ capital: 'Beirut',
+ languages: ['Arabic', 'French'],
+ population: 5988000,
+ flag: 'https://restcountries.eu/data/lbn.svg',
+ currency: 'Lebanese pound'
+ },
+ {
+ name: 'Lesotho',
+ capital: 'Maseru',
+ languages: ['English', 'Southern Sotho'],
+ population: 1894194,
+ flag: 'https://restcountries.eu/data/lso.svg',
+ currency: 'Lesotho loti'
+ },
+ {
+ name: 'Liberia',
+ capital: 'Monrovia',
+ languages: ['English'],
+ population: 4615000,
+ flag: 'https://restcountries.eu/data/lbr.svg',
+ currency: 'Liberian dollar'
+ },
+ {
+ name: 'Libya',
+ capital: 'Tripoli',
+ languages: ['Arabic'],
+ population: 6385000,
+ flag: 'https://restcountries.eu/data/lby.svg',
+ currency: 'Libyan dinar'
+ },
+ {
+ name: 'Liechtenstein',
+ capital: 'Vaduz',
+ languages: ['German'],
+ population: 37623,
+ flag: 'https://restcountries.eu/data/lie.svg',
+ currency: 'Swiss franc'
+ },
+ {
+ name: 'Lithuania',
+ capital: 'Vilnius',
+ languages: ['Lithuanian'],
+ population: 2872294,
+ flag: 'https://restcountries.eu/data/ltu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Luxembourg',
+ capital: 'Luxembourg',
+ languages: ['French', 'German', 'Luxembourgish'],
+ population: 576200,
+ flag: 'https://restcountries.eu/data/lux.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Macao',
+ capital: '',
+ languages: ['Chinese', 'Portuguese'],
+ population: 649100,
+ flag: 'https://restcountries.eu/data/mac.svg',
+ currency: 'Macanese pataca'
+ },
+ {
+ name: 'Macedonia (the former Yugoslav Republic of)',
+ capital: 'Skopje',
+ languages: ['Macedonian'],
+ population: 2058539,
+ flag: 'https://restcountries.eu/data/mkd.svg',
+ currency: 'Macedonian denar'
+ },
+ {
+ name: 'Madagascar',
+ capital: 'Antananarivo',
+ languages: ['French', 'Malagasy'],
+ population: 22434363,
+ flag: 'https://restcountries.eu/data/mdg.svg',
+ currency: 'Malagasy ariary'
+ },
+ {
+ name: 'Malawi',
+ capital: 'Lilongwe',
+ languages: ['English', 'Chichewa'],
+ population: 16832910,
+ flag: 'https://restcountries.eu/data/mwi.svg',
+ currency: 'Malawian kwacha'
+ },
+ {
+ name: 'Malaysia',
+ capital: 'Kuala Lumpur',
+ languages: ['Malaysian'],
+ population: 31405416,
+ flag: 'https://restcountries.eu/data/mys.svg',
+ currency: 'Malaysian ringgit'
+ },
+ {
+ name: 'Maldives',
+ capital: 'Malé',
+ languages: ['Divehi'],
+ population: 344023,
+ flag: 'https://restcountries.eu/data/mdv.svg',
+ currency: 'Maldivian rufiyaa'
+ },
+ {
+ name: 'Mali',
+ capital: 'Bamako',
+ languages: ['French'],
+ population: 18135000,
+ flag: 'https://restcountries.eu/data/mli.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Malta',
+ capital: 'Valletta',
+ languages: ['Maltese', 'English'],
+ population: 425384,
+ flag: 'https://restcountries.eu/data/mlt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Marshall Islands',
+ capital: 'Majuro',
+ languages: ['English', 'Marshallese'],
+ population: 54880,
+ flag: 'https://restcountries.eu/data/mhl.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Martinique',
+ capital: 'Fort-de-France',
+ languages: ['French'],
+ population: 378243,
+ flag: 'https://restcountries.eu/data/mtq.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mauritania',
+ capital: 'Nouakchott',
+ languages: ['Arabic'],
+ population: 3718678,
+ flag: 'https://restcountries.eu/data/mrt.svg',
+ currency: 'Mauritanian ouguiya'
+ },
+ {
+ name: 'Mauritius',
+ capital: 'Port Louis',
+ languages: ['English'],
+ population: 1262879,
+ flag: 'https://restcountries.eu/data/mus.svg',
+ currency: 'Mauritian rupee'
+ },
+ {
+ name: 'Mayotte',
+ capital: 'Mamoudzou',
+ languages: ['French'],
+ population: 226915,
+ flag: 'https://restcountries.eu/data/myt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mexico',
+ capital: 'Mexico City',
+ languages: ['Spanish'],
+ population: 122273473,
+ flag: 'https://restcountries.eu/data/mex.svg',
+ currency: 'Mexican peso'
+ },
+ {
+ name: 'Micronesia (Federated States of)',
+ capital: 'Palikir',
+ languages: ['English'],
+ population: 102800,
+ flag: 'https://restcountries.eu/data/fsm.svg',
+ currency: '[D]'
+ },
+ {
+ name: 'Moldova (Republic of)',
+ capital: 'Chișinău',
+ languages: ['Romanian'],
+ population: 3553100,
+ flag: 'https://restcountries.eu/data/mda.svg',
+ currency: 'Moldovan leu'
+ },
+ {
+ name: 'Monaco',
+ capital: 'Monaco',
+ languages: ['French'],
+ population: 38400,
+ flag: 'https://restcountries.eu/data/mco.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mongolia',
+ capital: 'Ulan Bator',
+ languages: ['Mongolian'],
+ population: 3093100,
+ flag: 'https://restcountries.eu/data/mng.svg',
+ currency: 'Mongolian tögrög'
+ },
+ {
+ name: 'Montenegro',
+ capital: 'Podgorica',
+ languages: ['Serbian', 'Bosnian', 'Albanian', 'Croatian'],
+ population: 621810,
+ flag: 'https://restcountries.eu/data/mne.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Montserrat',
+ capital: 'Plymouth',
+ languages: ['English'],
+ population: 4922,
+ flag: 'https://restcountries.eu/data/msr.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Morocco',
+ capital: 'Rabat',
+ languages: ['Arabic'],
+ population: 33337529,
+ flag: 'https://restcountries.eu/data/mar.svg',
+ currency: 'Moroccan dirham'
+ },
+ {
+ name: 'Mozambique',
+ capital: 'Maputo',
+ languages: ['Portuguese'],
+ population: 26423700,
+ flag: 'https://restcountries.eu/data/moz.svg',
+ currency: 'Mozambican metical'
+ },
+ {
+ name: 'Myanmar',
+ capital: 'Naypyidaw',
+ languages: ['Burmese'],
+ population: 51419420,
+ flag: 'https://restcountries.eu/data/mmr.svg',
+ currency: 'Burmese kyat'
+ },
+ {
+ name: 'Namibia',
+ capital: 'Windhoek',
+ languages: ['English', 'Afrikaans'],
+ population: 2324388,
+ flag: 'https://restcountries.eu/data/nam.svg',
+ currency: 'Namibian dollar'
+ },
+ {
+ name: 'Nauru',
+ capital: 'Yaren',
+ languages: ['English', 'Nauruan'],
+ population: 10084,
+ flag: 'https://restcountries.eu/data/nru.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Nepal',
+ capital: 'Kathmandu',
+ languages: ['Nepali'],
+ population: 28431500,
+ flag: 'https://restcountries.eu/data/npl.svg',
+ currency: 'Nepalese rupee'
+ },
+ {
+ name: 'Netherlands',
+ capital: 'Amsterdam',
+ languages: ['Dutch'],
+ population: 17019800,
+ flag: 'https://restcountries.eu/data/nld.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'New Caledonia',
+ capital: 'Nouméa',
+ languages: ['French'],
+ population: 268767,
+ flag: 'https://restcountries.eu/data/ncl.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'New Zealand',
+ capital: 'Wellington',
+ languages: ['English', 'Māori'],
+ population: 4697854,
+ flag: 'https://restcountries.eu/data/nzl.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Nicaragua',
+ capital: 'Managua',
+ languages: ['Spanish'],
+ population: 6262703,
+ flag: 'https://restcountries.eu/data/nic.svg',
+ currency: 'Nicaraguan córdoba'
+ },
+ {
+ name: 'Niger',
+ capital: 'Niamey',
+ languages: ['French'],
+ population: 20715000,
+ flag: 'https://restcountries.eu/data/ner.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Nigeria',
+ capital: 'Abuja',
+ languages: ['English'],
+ population: 186988000,
+ flag: 'https://restcountries.eu/data/nga.svg',
+ currency: 'Nigerian naira'
+ },
+ {
+ name: 'Niue',
+ capital: 'Alofi',
+ languages: ['English'],
+ population: 1470,
+ flag: 'https://restcountries.eu/data/niu.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Norfolk Island',
+ capital: 'Kingston',
+ languages: ['English'],
+ population: 2302,
+ flag: 'https://restcountries.eu/data/nfk.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: "Korea (Democratic People's Republic of)",
+ capital: 'Pyongyang',
+ languages: ['Korean'],
+ population: 25281000,
+ flag: 'https://restcountries.eu/data/prk.svg',
+ currency: 'North Korean won'
+ },
+ {
+ name: 'Northern Mariana Islands',
+ capital: 'Saipan',
+ languages: ['English', 'Chamorro'],
+ population: 56940,
+ flag: 'https://restcountries.eu/data/mnp.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Norway',
+ capital: 'Oslo',
+ languages: ['Norwegian', 'Norwegian Bokmål', 'Norwegian Nynorsk'],
+ population: 5223256,
+ flag: 'https://restcountries.eu/data/nor.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Oman',
+ capital: 'Muscat',
+ languages: ['Arabic'],
+ population: 4420133,
+ flag: 'https://restcountries.eu/data/omn.svg',
+ currency: 'Omani rial'
+ },
+ {
+ name: 'Pakistan',
+ capital: 'Islamabad',
+ languages: ['English', 'Urdu'],
+ population: 194125062,
+ flag: 'https://restcountries.eu/data/pak.svg',
+ currency: 'Pakistani rupee'
+ },
+ {
+ name: 'Palau',
+ capital: 'Ngerulmud',
+ languages: ['English'],
+ population: 17950,
+ flag: 'https://restcountries.eu/data/plw.svg',
+ currency: '[E]'
+ },
+ {
+ name: 'Palestine, State of',
+ capital: 'Ramallah',
+ languages: ['Arabic'],
+ population: 4682467,
+ flag: 'https://restcountries.eu/data/pse.svg',
+ currency: 'Israeli new sheqel'
+ },
+ {
+ name: 'Panama',
+ capital: 'Panama City',
+ languages: ['Spanish'],
+ population: 3814672,
+ flag: 'https://restcountries.eu/data/pan.svg',
+ currency: 'Panamanian balboa'
+ },
+ {
+ name: 'Papua New Guinea',
+ capital: 'Port Moresby',
+ languages: ['English'],
+ population: 8083700,
+ flag: 'https://restcountries.eu/data/png.svg',
+ currency: 'Papua New Guinean kina'
+ },
+ {
+ name: 'Paraguay',
+ capital: 'Asunción',
+ languages: ['Spanish', 'Guaraní'],
+ population: 6854536,
+ flag: 'https://restcountries.eu/data/pry.svg',
+ currency: 'Paraguayan guaraní'
+ },
+ {
+ name: 'Peru',
+ capital: 'Lima',
+ languages: ['Spanish'],
+ population: 31488700,
+ flag: 'https://restcountries.eu/data/per.svg',
+ currency: 'Peruvian sol'
+ },
+ {
+ name: 'Philippines',
+ capital: 'Manila',
+ languages: ['English'],
+ population: 103279800,
+ flag: 'https://restcountries.eu/data/phl.svg',
+ currency: 'Philippine peso'
+ },
+ {
+ name: 'Pitcairn',
+ capital: 'Adamstown',
+ languages: ['English'],
+ population: 56,
+ flag: 'https://restcountries.eu/data/pcn.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Poland',
+ capital: 'Warsaw',
+ languages: ['Polish'],
+ population: 38437239,
+ flag: 'https://restcountries.eu/data/pol.svg',
+ currency: 'Polish złoty'
+ },
+ {
+ name: 'Portugal',
+ capital: 'Lisbon',
+ languages: ['Portuguese'],
+ population: 10374822,
+ flag: 'https://restcountries.eu/data/prt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Puerto Rico',
+ capital: 'San Juan',
+ languages: ['Spanish', 'English'],
+ population: 3474182,
+ flag: 'https://restcountries.eu/data/pri.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Qatar',
+ capital: 'Doha',
+ languages: ['Arabic'],
+ population: 2587564,
+ flag: 'https://restcountries.eu/data/qat.svg',
+ currency: 'Qatari riyal'
+ },
+ {
+ name: 'Republic of Kosovo',
+ capital: 'Pristina',
+ languages: ['Albanian', 'Serbian'],
+ population: 1733842,
+ flag: 'https://restcountries.eu/data/kos.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Réunion',
+ capital: 'Saint-Denis',
+ languages: ['French'],
+ population: 840974,
+ flag: 'https://restcountries.eu/data/reu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Romania',
+ capital: 'Bucharest',
+ languages: ['Romanian'],
+ population: 19861408,
+ flag: 'https://restcountries.eu/data/rou.svg',
+ currency: 'Romanian leu'
+ },
+ {
+ name: 'Russian Federation',
+ capital: 'Moscow',
+ languages: ['Russian'],
+ population: 146599183,
+ flag: 'https://restcountries.eu/data/rus.svg',
+ currency: 'Russian ruble'
+ },
+ {
+ name: 'Rwanda',
+ capital: 'Kigali',
+ languages: ['Kinyarwanda', 'English', 'French'],
+ population: 11553188,
+ flag: 'https://restcountries.eu/data/rwa.svg',
+ currency: 'Rwandan franc'
+ },
+ {
+ name: 'Saint Barthélemy',
+ capital: 'Gustavia',
+ languages: ['French'],
+ population: 9417,
+ flag: 'https://restcountries.eu/data/blm.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Helena, Ascension and Tristan da Cunha',
+ capital: 'Jamestown',
+ languages: ['English'],
+ population: 4255,
+ flag: 'https://restcountries.eu/data/shn.svg',
+ currency: 'Saint Helena pound'
+ },
+ {
+ name: 'Saint Kitts and Nevis',
+ capital: 'Basseterre',
+ languages: ['English'],
+ population: 46204,
+ flag: 'https://restcountries.eu/data/kna.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Saint Lucia',
+ capital: 'Castries',
+ languages: ['English'],
+ population: 186000,
+ flag: 'https://restcountries.eu/data/lca.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Saint Martin (French part)',
+ capital: 'Marigot',
+ languages: ['English', 'French', 'Dutch'],
+ population: 36979,
+ flag: 'https://restcountries.eu/data/maf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Pierre and Miquelon',
+ capital: 'Saint-Pierre',
+ languages: ['French'],
+ population: 6069,
+ flag: 'https://restcountries.eu/data/spm.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Vincent and the Grenadines',
+ capital: 'Kingstown',
+ languages: ['English'],
+ population: 109991,
+ flag: 'https://restcountries.eu/data/vct.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Samoa',
+ capital: 'Apia',
+ languages: ['Samoan', 'English'],
+ population: 194899,
+ flag: 'https://restcountries.eu/data/wsm.svg',
+ currency: 'Samoan tālā'
+ },
+ {
+ name: 'San Marino',
+ capital: 'City of San Marino',
+ languages: ['Italian'],
+ population: 33005,
+ flag: 'https://restcountries.eu/data/smr.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Sao Tome and Principe',
+ capital: 'São Tomé',
+ languages: ['Portuguese'],
+ population: 187356,
+ flag: 'https://restcountries.eu/data/stp.svg',
+ currency: 'São Tomé and Príncipe dobra'
+ },
+ {
+ name: 'Saudi Arabia',
+ capital: 'Riyadh',
+ languages: ['Arabic'],
+ population: 32248200,
+ flag: 'https://restcountries.eu/data/sau.svg',
+ currency: 'Saudi riyal'
+ },
+ {
+ name: 'Senegal',
+ capital: 'Dakar',
+ languages: ['French'],
+ population: 14799859,
+ flag: 'https://restcountries.eu/data/sen.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Serbia',
+ capital: 'Belgrade',
+ languages: ['Serbian'],
+ population: 7076372,
+ flag: 'https://restcountries.eu/data/srb.svg',
+ currency: 'Serbian dinar'
+ },
+ {
+ name: 'Seychelles',
+ capital: 'Victoria',
+ languages: ['French', 'English'],
+ population: 91400,
+ flag: 'https://restcountries.eu/data/syc.svg',
+ currency: 'Seychellois rupee'
+ },
+ {
+ name: 'Sierra Leone',
+ capital: 'Freetown',
+ languages: ['English'],
+ population: 7075641,
+ flag: 'https://restcountries.eu/data/sle.svg',
+ currency: 'Sierra Leonean leone'
+ },
+ {
+ name: 'Singapore',
+ capital: 'Singapore',
+ languages: ['English', 'Malay', 'Tamil', 'Chinese'],
+ population: 5535000,
+ flag: 'https://restcountries.eu/data/sgp.svg',
+ currency: 'Brunei dollar'
+ },
+ {
+ name: 'Sint Maarten (Dutch part)',
+ capital: 'Philipsburg',
+ languages: ['Dutch', 'English'],
+ population: 38247,
+ flag: 'https://restcountries.eu/data/sxm.svg',
+ currency: 'Netherlands Antillean guilder'
+ },
+ {
+ name: 'Slovakia',
+ capital: 'Bratislava',
+ languages: ['Slovak'],
+ population: 5426252,
+ flag: 'https://restcountries.eu/data/svk.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Slovenia',
+ capital: 'Ljubljana',
+ languages: ['Slovene'],
+ population: 2064188,
+ flag: 'https://restcountries.eu/data/svn.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Solomon Islands',
+ capital: 'Honiara',
+ languages: ['English'],
+ population: 642000,
+ flag: 'https://restcountries.eu/data/slb.svg',
+ currency: 'Solomon Islands dollar'
+ },
+ {
+ name: 'Somalia',
+ capital: 'Mogadishu',
+ languages: ['Somali', 'Arabic'],
+ population: 11079000,
+ flag: 'https://restcountries.eu/data/som.svg',
+ currency: 'Somali shilling'
+ },
+ {
+ name: 'South Africa',
+ capital: 'Pretoria',
+ languages: [
+ 'Afrikaans',
+ 'English',
+ 'Southern Ndebele',
+ 'Southern Sotho',
+ 'Swati',
+ 'Tswana',
+ 'Tsonga',
+ 'Venda',
+ 'Xhosa',
+ 'Zulu'
+ ],
+ population: 55653654,
+ flag: 'https://restcountries.eu/data/zaf.svg',
+ currency: 'South African rand'
+ },
+ {
+ name: 'South Georgia and the South Sandwich Islands',
+ capital: 'King Edward Point',
+ languages: ['English'],
+ population: 30,
+ flag: 'https://restcountries.eu/data/sgs.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Korea (Republic of)',
+ capital: 'Seoul',
+ languages: ['Korean'],
+ population: 50801405,
+ flag: 'https://restcountries.eu/data/kor.svg',
+ currency: 'South Korean won'
+ },
+ {
+ name: 'South Sudan',
+ capital: 'Juba',
+ languages: ['English'],
+ population: 12131000,
+ flag: 'https://restcountries.eu/data/ssd.svg',
+ currency: 'South Sudanese pound'
+ },
+ {
+ name: 'Spain',
+ capital: 'Madrid',
+ languages: ['Spanish'],
+ population: 46438422,
+ flag: 'https://restcountries.eu/data/esp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Sri Lanka',
+ capital: 'Colombo',
+ languages: ['Sinhalese', 'Tamil'],
+ population: 20966000,
+ flag: 'https://restcountries.eu/data/lka.svg',
+ currency: 'Sri Lankan rupee'
+ },
+ {
+ name: 'Sudan',
+ capital: 'Khartoum',
+ languages: ['Arabic', 'English'],
+ population: 39598700,
+ flag: 'https://restcountries.eu/data/sdn.svg',
+ currency: 'Sudanese pound'
+ },
+ {
+ name: 'Suriname',
+ capital: 'Paramaribo',
+ languages: ['Dutch'],
+ population: 541638,
+ flag: 'https://restcountries.eu/data/sur.svg',
+ currency: 'Surinamese dollar'
+ },
+ {
+ name: 'Svalbard and Jan Mayen',
+ capital: 'Longyearbyen',
+ languages: ['Norwegian'],
+ population: 2562,
+ flag: 'https://restcountries.eu/data/sjm.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Swaziland',
+ capital: 'Lobamba',
+ languages: ['English', 'Swati'],
+ population: 1132657,
+ flag: 'https://restcountries.eu/data/swz.svg',
+ currency: 'Swazi lilangeni'
+ },
+ {
+ name: 'Sweden',
+ capital: 'Stockholm',
+ languages: ['Swedish'],
+ population: 9894888,
+ flag: 'https://restcountries.eu/data/swe.svg',
+ currency: 'Swedish krona'
+ },
+ {
+ name: 'Switzerland',
+ capital: 'Bern',
+ languages: ['German', 'French', 'Italian'],
+ population: 8341600,
+ flag: 'https://restcountries.eu/data/che.svg',
+ currency: 'Swiss franc'
+ },
+ {
+ name: 'Syrian Arab Republic',
+ capital: 'Damascus',
+ languages: ['Arabic'],
+ population: 18564000,
+ flag: 'https://restcountries.eu/data/syr.svg',
+ currency: 'Syrian pound'
+ },
+ {
+ name: 'Taiwan',
+ capital: 'Taipei',
+ languages: ['Chinese'],
+ population: 23503349,
+ flag: 'https://restcountries.eu/data/twn.svg',
+ currency: 'New Taiwan dollar'
+ },
+ {
+ name: 'Tajikistan',
+ capital: 'Dushanbe',
+ languages: ['Tajik', 'Russian'],
+ population: 8593600,
+ flag: 'https://restcountries.eu/data/tjk.svg',
+ currency: 'Tajikistani somoni'
+ },
+ {
+ name: 'Tanzania, United Republic of',
+ capital: 'Dodoma',
+ languages: ['Swahili', 'English'],
+ population: 55155000,
+ flag: 'https://restcountries.eu/data/tza.svg',
+ currency: 'Tanzanian shilling'
+ },
+ {
+ name: 'Thailand',
+ capital: 'Bangkok',
+ languages: ['Thai'],
+ population: 65327652,
+ flag: 'https://restcountries.eu/data/tha.svg',
+ currency: 'Thai baht'
+ },
+ {
+ name: 'Timor-Leste',
+ capital: 'Dili',
+ languages: ['Portuguese'],
+ population: 1167242,
+ flag: 'https://restcountries.eu/data/tls.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Togo',
+ capital: 'Lomé',
+ languages: ['French'],
+ population: 7143000,
+ flag: 'https://restcountries.eu/data/tgo.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Tokelau',
+ capital: 'Fakaofo',
+ languages: ['English'],
+ population: 1411,
+ flag: 'https://restcountries.eu/data/tkl.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Tonga',
+ capital: "Nuku'alofa",
+ languages: ['English', 'Tonga (Tonga Islands)'],
+ population: 103252,
+ flag: 'https://restcountries.eu/data/ton.svg',
+ currency: 'Tongan paʻanga'
+ },
+ {
+ name: 'Trinidad and Tobago',
+ capital: 'Port of Spain',
+ languages: ['English'],
+ population: 1349667,
+ flag: 'https://restcountries.eu/data/tto.svg',
+ currency: 'Trinidad and Tobago dollar'
+ },
+ {
+ name: 'Tunisia',
+ capital: 'Tunis',
+ languages: ['Arabic'],
+ population: 11154400,
+ flag: 'https://restcountries.eu/data/tun.svg',
+ currency: 'Tunisian dinar'
+ },
+ {
+ name: 'Turkey',
+ capital: 'Ankara',
+ languages: ['Turkish'],
+ population: 78741053,
+ flag: 'https://restcountries.eu/data/tur.svg',
+ currency: 'Turkish lira'
+ },
+ {
+ name: 'Turkmenistan',
+ capital: 'Ashgabat',
+ languages: ['Turkmen', 'Russian'],
+ population: 4751120,
+ flag: 'https://restcountries.eu/data/tkm.svg',
+ currency: 'Turkmenistan manat'
+ },
+ {
+ name: 'Turks and Caicos Islands',
+ capital: 'Cockburn Town',
+ languages: ['English'],
+ population: 31458,
+ flag: 'https://restcountries.eu/data/tca.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Tuvalu',
+ capital: 'Funafuti',
+ languages: ['English'],
+ population: 10640,
+ flag: 'https://restcountries.eu/data/tuv.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Uganda',
+ capital: 'Kampala',
+ languages: ['English', 'Swahili'],
+ population: 33860700,
+ flag: 'https://restcountries.eu/data/uga.svg',
+ currency: 'Ugandan shilling'
+ },
+ {
+ name: 'Ukraine',
+ capital: 'Kiev',
+ languages: ['Ukrainian'],
+ population: 42692393,
+ flag: 'https://restcountries.eu/data/ukr.svg',
+ currency: 'Ukrainian hryvnia'
+ },
+ {
+ name: 'United Arab Emirates',
+ capital: 'Abu Dhabi',
+ languages: ['Arabic'],
+ population: 9856000,
+ flag: 'https://restcountries.eu/data/are.svg',
+ currency: 'United Arab Emirates dirham'
+ },
+ {
+ name: 'United Kingdom of Great Britain and Northern Ireland',
+ capital: 'London',
+ languages: ['English'],
+ population: 65110000,
+ flag: 'https://restcountries.eu/data/gbr.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'United States of America',
+ capital: 'Washington, D.C.',
+ languages: ['English'],
+ population: 323947000,
+ flag: 'https://restcountries.eu/data/usa.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Uruguay',
+ capital: 'Montevideo',
+ languages: ['Spanish'],
+ population: 3480222,
+ flag: 'https://restcountries.eu/data/ury.svg',
+ currency: 'Uruguayan peso'
+ },
+ {
+ name: 'Uzbekistan',
+ capital: 'Tashkent',
+ languages: ['Uzbek', 'Russian'],
+ population: 31576400,
+ flag: 'https://restcountries.eu/data/uzb.svg',
+ currency: "Uzbekistani so'm"
+ },
+ {
+ name: 'Vanuatu',
+ capital: 'Port Vila',
+ languages: ['Bislama', 'English', 'French'],
+ population: 277500,
+ flag: 'https://restcountries.eu/data/vut.svg',
+ currency: 'Vanuatu vatu'
+ },
+ {
+ name: 'Venezuela (Bolivarian Republic of)',
+ capital: 'Caracas',
+ languages: ['Spanish'],
+ population: 31028700,
+ flag: 'https://restcountries.eu/data/ven.svg',
+ currency: 'Venezuelan bolívar'
+ },
+ {
+ name: 'Viet Nam',
+ capital: 'Hanoi',
+ languages: ['Vietnamese'],
+ population: 92700000,
+ flag: 'https://restcountries.eu/data/vnm.svg',
+ currency: 'Vietnamese đồng'
+ },
+ {
+ name: 'Wallis and Futuna',
+ capital: 'Mata-Utu',
+ languages: ['French'],
+ population: 11750,
+ flag: 'https://restcountries.eu/data/wlf.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'Western Sahara',
+ capital: 'El Aaiún',
+ languages: ['Spanish'],
+ population: 510713,
+ flag: 'https://restcountries.eu/data/esh.svg',
+ currency: 'Moroccan dirham'
+ },
+ {
+ name: 'Yemen',
+ capital: "Sana'a",
+ languages: ['Arabic'],
+ population: 27478000,
+ flag: 'https://restcountries.eu/data/yem.svg',
+ currency: 'Yemeni rial'
+ },
+ {
+ name: 'Zambia',
+ capital: 'Lusaka',
+ languages: ['English'],
+ population: 15933883,
+ flag: 'https://restcountries.eu/data/zmb.svg',
+ currency: 'Zambian kwacha'
+ },
+ {
+ name: 'Zimbabwe',
+ capital: 'Harare',
+ languages: ['English', 'Shona', 'Northern Ndebele'],
+ population: 14240168,
+ flag: 'https://restcountries.eu/data/zwe.svg',
+ currency: 'Botswana pula'
+ }
+]
diff --git a/ID/08_Day_Objects/08_day_starter/index.html b/ID/08_Day_Objects/08_day_starter/index.html
new file mode 100644
index 0000000..fbe7e81
--- /dev/null
+++ b/ID/08_Day_Objects/08_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:08 Day
+
+
+
+
30DaysOfJavaScript:08 Day
+
Objects
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/08_Day_Objects/08_day_starter/scripts/main.js b/ID/08_Day_Objects/08_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/08_Day_Objects/08_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/09_Day_Higher_order_functions/09_day_higher_order_functions.md b/ID/09_Day_Higher_order_functions/09_day_higher_order_functions.md
new file mode 100644
index 0000000..3c8a619
--- /dev/null
+++ b/ID/09_Day_Higher_order_functions/09_day_higher_order_functions.md
@@ -0,0 +1,714 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/09_Day_Higher_order_functions/09_day_starter/scripts/main.js b/ID/09_Day_Higher_order_functions/09_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/09_Day_Higher_order_functions/09_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md b/ID/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
new file mode 100644
index 0000000..6d0064c
--- /dev/null
+++ b/ID/10_Day_Sets_and_Maps/10_day_Sets_and_Maps.md
@@ -0,0 +1,451 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/10_Day_Sets_and_Maps/10_day_starter/scripts/main.js b/ID/10_Day_Sets_and_Maps/10_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/10_Day_Sets_and_Maps/10_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md b/ID/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
new file mode 100644
index 0000000..5f0e896
--- /dev/null
+++ b/ID/11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md
@@ -0,0 +1,698 @@
+
+
30 Days Of JavaScript: Destructuring and Spreading
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/11_Day_Destructuring_and_spreading/11_day_starter/scripts/main.js b/ID/11_Day_Destructuring_and_spreading/11_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/11_Day_Destructuring_and_spreading/11_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/12_Day_Regular_expressions/12_day_regular_expressions.md b/ID/12_Day_Regular_expressions/12_day_regular_expressions.md
new file mode 100644
index 0000000..99d85f0
--- /dev/null
+++ b/ID/12_Day_Regular_expressions/12_day_regular_expressions.md
@@ -0,0 +1,524 @@
+
+
+[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13>>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
+
+
+
+- [📘 Day 12](#-day-12)
+ - [Regular Expressions](#regular-expressions)
+ - [RegExp parameters](#regexp-parameters)
+ - [Pattern](#pattern)
+ - [Flags](#flags)
+ - [Creating a pattern with RegExp Constructor](#creating-a-pattern-with-regexp-constructor)
+ - [Creating a pattern without RegExp Constructor](#creating-a-pattern-without-regexp-constructor)
+ - [RegExpp Object Methods](#regexpp-object-methods)
+ - [Testing for a match](#testing-for-a-match)
+ - [Array containing all of the match](#array-containing-all-of-the-match)
+ - [Replacing a substring](#replacing-a-substring)
+ - [Square Bracket](#square-bracket)
+ - [Escape character(\\) in RegExp](#escape-character-in-regexp)
+ - [One or more times(+)](#one-or-more-times)
+ - [Period(.)](#period)
+ - [Zero or more times(*)](#zero-or-more-times)
+ - [Zero or one times(?)](#zero-or-one-times)
+ - [Quantifier in RegExp](#quantifier-in-regexp)
+ - [Cart ^](#cart-)
+ - [Exact match](#exact-match)
+ - [💻 Exercises](#-exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# 📘 Day 12
+
+## Regular Expressions
+
+A regular expression or RegExp is a small programming language that helps to find pattern in data. A RegExp can be used to check if some pattern exists in a different data types. To use RegExp in JavaScript either we use RegExp constructor or we can declare a RegExp pattern using two forward slashes followed by a flag. We can create a pattern in two ways.
+
+To declare a string we use a single quote, double quote a backtick to declare a regular expression we use two forward slashes and an optional flag. The flag could be g, i, m, s, u or y.
+
+### RegExp parameters
+
+A regular expression takes two parameters. One required search pattern and an optional flag.
+
+#### Pattern
+
+A pattern could be a text or any form of pattern which some sort of similarity. For instance the word spam in an email could be a pattern we are interested to look for in an email or a phone number format number might be our interest to look for.
+
+#### Flags
+
+Flags are optional parameters in a regular expression which determine the type of searching. Let see some of the flags:
+
+- g:is a global flag which means looking for a pattern in whole text
+- i: case insensitive flag(it searches for both lowercase and uppercase)
+- m: multiline
+
+### Creating a pattern with RegExp Constructor
+
+Declaring regular expression without global flag and case insensitive flag.
+
+```js
+// without flag
+let pattern = 'love'
+let regEx = new RegExp(pattern)
+```
+
+Declaring regular expression with global flag and case insensitive flag.
+
+```js
+let pattern = 'love'
+let flag = 'gi'
+let regEx = new RegExp(pattern, flag)
+```
+
+Declaring a regex pattern using RegExp object. Writing the pattern and the flag inside the RegExp constructor
+
+```js
+let regEx = new RegExp('love','gi')
+```
+
+### Creating a pattern without RegExp Constructor
+
+Declaring regular expression with global flag and case insensitive flag.
+
+```js
+let regEx= /love/gi
+```
+
+The above regular expression is the same as the one which we created with RegExp constructor
+
+```js
+let regEx= new RegExp('love','gi')
+```
+
+### RegExpp Object Methods
+
+Let see some of RegExp methods
+
+#### Testing for a match
+
+*test()*:Tests for a match in a string. It returns true or false.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/
+const result = pattern.test(str)
+console.log(result)
+```
+
+```sh
+true
+```
+
+#### Array containing all of the match
+
+*match()*:Returns an array containing all of the matches, including capturing groups, or null if no match is found.
+If we do not use a global flag, match() returns an array containing the pattern, index, input and group.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/
+const result = str.match(pattern)
+console.log(result)
+```
+
+```sh
+["love", index: 2, input: "I love JavaScript", groups: undefined]
+```
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/g
+const result = str.match(pattern)
+console.log(result)
+```
+
+```sh
+["love"]
+```
+
+*search()*: Tests for a match in a string. It returns the index of the match, or -1 if the search fails.
+
+```js
+const str = 'I love JavaScript'
+const pattern = /love/g
+const result = str.search(pattern)
+console.log(result)
+```
+
+```sh
+2
+```
+
+#### Replacing a substring
+
+*replace()*: Executes a search for a match in a string, and replaces the matched substring with a replacement substring.
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python|python/, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend python for a first programming language
+```
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python|python/g, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend JavaScript for a first programming language
+```
+
+```js
+const txt = 'Python is the most beautiful language that a human begin has ever created.\
+I recommend python for a first programming language'
+
+matchReplaced = txt.replace(/Python/gi, 'JavaScript')
+console.log(matchReplaced)
+```
+
+```sh
+JavaScript is the most beautiful language that a human begin has ever created.I recommend JavaScript for a first programming language
+```
+
+```js
+
+const txt = '%I a%m te%%a%%che%r% a%n%d %% I l%o%ve te%ach%ing.\
+T%he%re i%s n%o%th%ing as m%ore r%ewarding a%s e%duc%at%i%ng a%n%d e%m%p%ow%er%ing \
+p%e%o%ple.\
+I fo%und te%a%ching m%ore i%n%t%er%%es%ting t%h%an any other %jobs.\
+D%o%es thi%s m%ot%iv%a%te %y%o%u to b%e a t%e%a%cher.'
+
+matches = txt.replace(/%/g, '')
+console.log(matches)
+```
+
+```sh
+I am teacher and I love teaching.There is nothing as more rewarding as educating and empowering people.I found teaching more interesting than any other jobs.Does this motivate you to be a teacher.
+```
+
+* []: A set of characters
+ * [a-c] means, a or b or c
+ * [a-z] means, any letter a to z
+ * [A-Z] means, any character A to Z
+ * [0-3] means, 0 or 1 or 2 or 3
+ * [0-9] means any number 0 to 9
+ * [A-Za-z0-9] any character which is a to z, A to Z, 0 to 9
+* \\: uses to escape special characters
+ * \d mean:match where the string contains digits (numbers from 0-9)
+ * \D mean: match where the string does not contain digits
+* . : any character except new line character(\n)
+* ^: starts with
+ * r'^substring' eg r'^love', a sentence which starts with a word love
+ * r'[^abc] mean not a, not b, not c.
+* $: ends with
+ * r'substring$' eg r'love$', sentence ends with a word love
+* *: zero or more times
+ * r'[a]*' means a optional or it can be occur many times.
+* +: one or more times
+ * r'[a]+' mean at least once or more times
+* ?: zero or one times
+ * r'[a]?' mean zero times or once
+* {3}: Exactly 3 characters
+* {3,}: At least 3 character
+* {3,8}: 3 to 8 characters
+* |: Either or
+ * r'apple|banana' mean either of an apple or a banana
+* (): Capture and group
+
+
+
+Let's use example to clarify the above meta characters
+
+### Square Bracket
+
+Let's use square bracket to include lower and upper case
+
+```js
+const pattern = '[Aa]pple' // this square bracket mean either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. '
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", index: 0, input: "Apple and banana are fruits. An old cliche says an…by a banana a day keeps the doctor far far away. ", groups: undefined]
+
+```
+
+```js
+const pattern = /[Aa]pple/g // this square bracket mean either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. '
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", "apple"]
+```
+
+If we want to look for the banana, we write the pattern as follows:
+
+```js
+const pattern = /[Aa]pple|[Bb]anana/g // this square bracket mean either A or a
+const txt = 'Apple and banana are fruits. An old cliche says an apple a day a doctor way has been replaced by a banana a day keeps the doctor far far away. Banana is easy to eat too.'
+const matches = txt.match(pattern)
+
+console.log(matches)
+```
+
+```sh
+["Apple", "banana", "apple", "banana", "Banana"]
+```
+
+Using the square bracket and or operator , we manage to extract Apple, apple, Banana and banana.
+
+### Escape character(\\) in RegExp
+
+```js
+const pattern = /\d/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+
+console.log(matches) // ["1", "2", "2", "0", "2", "0"], this is not what we want
+```
+
+```js
+const pattern = /\d+/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+
+console.log(matches) // ["12", "2020"], this is not what we want
+```
+
+### One or more times(+)
+
+```js
+const pattern = /\d+/g // d is a special character which means digits
+const txt = 'This regular expression example was made in January 12, 2020.'
+const matches = txt. match(pattern)
+console.log(matches) // ["12", "2020"], this is not what we want
+```
+
+### Period(.)
+
+```js
+const pattern = /[a]./g // this square bracket means a and . means any character except new line
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ["an", "an", "an", "a ", "ar"]
+```
+
+```js
+const pattern = /[a].+/g // . any character, + any character one or more times
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ['and banana are fruits']
+```
+
+### Zero or more times(*)
+
+Zero or many times. The pattern could may not occur or it can occur many times.
+
+```js
+
+const pattern = /[a].*/g //. any character, + any character one or more times
+const txt = 'Apple and banana are fruits'
+const matches = txt.match(pattern)
+
+console.log(matches) // ['and banana are fruits']
+
+```
+
+### Zero or one times(?)
+
+Zero or one times. The pattern could may not occur or it may occur once.
+
+```js
+const txt = 'I am not sure if there is a convention how to write the word e-mail.\
+Some people write it email others may write it as Email or E-mail.'
+const pattern = /[Ee]-?mail/g // ? means optional
+matches = txt.match(pattern)
+
+console.log(matches) // ["e-mail", "email", "Email", "E-mail"]
+
+```
+
+### Quantifier in RegExp
+
+We can specify the length of the substring we look for in a text, using a curly bracket. Lets imagine, we are interested in substring that their length are 4 characters
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\d{4}/g // exactly four times
+const matches = txt.match(pattern)
+console.log(matches) // ['2019']
+```
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /\d{1,4}/g // 1 to 4
+const matches = txt.match(pattern)
+console.log(matches) // ['6', '2019']
+```
+
+### Cart ^
+
+- Starts with
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /^This/ // ^ means starts with
+const matches = txt.match(pattern)
+console.log(matches) // ['This']
+```
+
+- Negation
+
+```js
+const txt = 'This regular expression example was made in December 6, 2019.'
+const pattern = /[^A-Za-z,. ]+/g // ^ in set character means negation, not A to Z, not a to z, no space, no coma no period
+const matches = txt.match(pattern)
+console.log(matches) // ["6", "2019"]
+```
+
+### Exact match
+
+It should have ^ starting and $ which is an end.
+
+```js
+let pattern = /^[A-Z][a-z]{3,12}$/;
+let name = 'Asabeneh';
+let result = pattern.test(name)
+
+console.log(result) // true
+```
+
+🌕 You are going far. Keep going! Now, you are super charged with the power of regular expression. You have the power to extract and clean any kind of text and you can make meaning out of unstructured data. You have just completed day 12 challenges and you are 12 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## 💻 Exercises
+
+### Exercises: Level 1
+
+1. Calculate the total annual income of the person from the following text. ‘He earns 4000 euro from salary per month, 10000 euro annual bonus, 5500 euro online courses per month.’
+1. The position of some particles on the horizontal x-axis -12, -4, -3 and -1 in the negative direction, 0 at origin, 4 and 8 in the positive direction. Extract these numbers and find the distance between the two furthest particles.
+
+```js
+points = ['-1', '2', '-4', '-3', '-1', '0', '4', '8']
+sortedPoints = [-4, -3, -1, -1, 0, 2, 4, 8]
+distance = 12
+```
+
+1. Write a pattern which identify if a string is a valid JavaScript variable
+
+ ```sh
+ is_valid_variable('first_name') # True
+ is_valid_variable('first-name') # False
+ is_valid_variable('1first_name') # False
+ is_valid_variable('firstname') # True
+ ```
+
+### Exercises: Level 2
+
+1. Write a function called *tenMostFrequentWords* which get the ten most frequent word from a string?
+
+ ```js
+ paragraph = `I love teaching. If you do not love teaching what else can you love. I love Python if you do not love something which can give you all the capabilities to develop an application what else can you love.`
+ console.log(tenMostFrequentWords(paragraph))
+ ```
+
+ ```sh
+ [
+ {word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1},
+ {word:'to', count:1},
+ {word:'the', count:1},
+ {word:'something', count:1},
+ {word:'if', count:1},
+ {word:'give', count:1},
+ {word:'develop',count:1},
+ {word:'capabilities',count:1},
+ {word:'application', count:1},
+ {word:'an',count:1},
+ {word:'all',count:1},
+ {word:'Python',count:1},
+ {word:'If',count:1}]
+ ```
+
+ ```js
+ console.log(tenMostFrequentWords(paragraph, 10))
+ ```
+
+ ```sh
+ [{word:'love', count:6},
+ {word:'you', count:5},
+ {word:'can', count:3},
+ {word:'what', count:2},
+ {word:'teaching', count:2},
+ {word:'not', count:2},
+ {word:'else', count:2},
+ {word:'do', count:2},
+ {word:'I', count:2},
+ {word:'which', count:1}
+ ]
+ ```
+
+### Exercises: Level 3
+
+1. Writ a function which cleans text. Clean the following text. After cleaning, count three most frequent words in the string.
+
+ ```js
+ sentence = `%I $am@% a %tea@cher%, &and& I lo%#ve %tea@ching%;. There $is nothing; &as& mo@re rewarding as educa@ting &and& @emp%o@wering peo@ple. ;I found tea@ching m%o@re interesting tha@n any other %jo@bs. %Do@es thi%s mo@tivate yo@u to be a tea@cher!?`
+
+ console.log(cleanText(sentence))
+ ```
+
+ ```sh
+ I am a teacher and I love teaching There is nothing as more rewarding as educating and empowering people I found teaching more interesting than any other jobs Does this motivate you to be a teacher
+ ```
+1. Write a function which find the most frequent words. After cleaning, count three most frequent words in the string.
+
+ ```js
+ console.log(mostFrequentWords(cleanedText))
+ [{word:'I', count:3}, {word:'teaching', count:2}, {word:'teacher', count:2}]
+ ```
+
+
+🎉 CONGRATULATIONS ! 🎉
+
+
+[<< Day 11](../11_Day_Destructuring_and_spreading/11_day_destructuring_and_spreading.md) | [Day 13>>](../13_Day_Console_object_methods/13_day_console_object_methods.md)
diff --git a/ID/12_Day_Regular_expressions/12_day_starter/data/countries_data.js b/ID/12_Day_Regular_expressions/12_day_starter/data/countries_data.js
new file mode 100644
index 0000000..92acddd
--- /dev/null
+++ b/ID/12_Day_Regular_expressions/12_day_starter/data/countries_data.js
@@ -0,0 +1,2013 @@
+const countries = [
+ {
+ name: 'Afghanistan',
+ capital: 'Kabul',
+ languages: ['Pashto', 'Uzbek', 'Turkmen'],
+ population: 27657145,
+ flag: 'https://restcountries.eu/data/afg.svg',
+ currency: 'Afghan afghani'
+ },
+ {
+ name: 'Åland Islands',
+ capital: 'Mariehamn',
+ languages: ['Swedish'],
+ population: 28875,
+ flag: 'https://restcountries.eu/data/ala.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Albania',
+ capital: 'Tirana',
+ languages: ['Albanian'],
+ population: 2886026,
+ flag: 'https://restcountries.eu/data/alb.svg',
+ currency: 'Albanian lek'
+ },
+ {
+ name: 'Algeria',
+ capital: 'Algiers',
+ languages: ['Arabic'],
+ population: 40400000,
+ flag: 'https://restcountries.eu/data/dza.svg',
+ currency: 'Algerian dinar'
+ },
+ {
+ name: 'American Samoa',
+ capital: 'Pago Pago',
+ languages: ['English', 'Samoan'],
+ population: 57100,
+ flag: 'https://restcountries.eu/data/asm.svg',
+ currency: 'United State Dollar'
+ },
+ {
+ name: 'Andorra',
+ capital: 'Andorra la Vella',
+ languages: ['Catalan'],
+ population: 78014,
+ flag: 'https://restcountries.eu/data/and.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Angola',
+ capital: 'Luanda',
+ languages: ['Portuguese'],
+ population: 25868000,
+ flag: 'https://restcountries.eu/data/ago.svg',
+ currency: 'Angolan kwanza'
+ },
+ {
+ name: 'Anguilla',
+ capital: 'The Valley',
+ languages: ['English'],
+ population: 13452,
+ flag: 'https://restcountries.eu/data/aia.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Antarctica',
+ capital: '',
+ languages: ['English', 'Russian'],
+ population: 1000,
+ flag: 'https://restcountries.eu/data/ata.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Antigua and Barbuda',
+ capital: "Saint John's",
+ languages: ['English'],
+ population: 86295,
+ flag: 'https://restcountries.eu/data/atg.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Argentina',
+ capital: 'Buenos Aires',
+ languages: ['Spanish', 'Guaraní'],
+ population: 43590400,
+ flag: 'https://restcountries.eu/data/arg.svg',
+ currency: 'Argentine peso'
+ },
+ {
+ name: 'Armenia',
+ capital: 'Yerevan',
+ languages: ['Armenian', 'Russian'],
+ population: 2994400,
+ flag: 'https://restcountries.eu/data/arm.svg',
+ currency: 'Armenian dram'
+ },
+ {
+ name: 'Aruba',
+ capital: 'Oranjestad',
+ languages: ['Dutch', '(Eastern) Punjabi'],
+ population: 107394,
+ flag: 'https://restcountries.eu/data/abw.svg',
+ currency: 'Aruban florin'
+ },
+ {
+ name: 'Australia',
+ capital: 'Canberra',
+ languages: ['English'],
+ population: 24117360,
+ flag: 'https://restcountries.eu/data/aus.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Austria',
+ capital: 'Vienna',
+ languages: ['German'],
+ population: 8725931,
+ flag: 'https://restcountries.eu/data/aut.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Azerbaijan',
+ capital: 'Baku',
+ languages: ['Azerbaijani'],
+ population: 9730500,
+ flag: 'https://restcountries.eu/data/aze.svg',
+ currency: 'Azerbaijani manat'
+ },
+ {
+ name: 'Bahamas',
+ capital: 'Nassau',
+ languages: ['English'],
+ population: 378040,
+ flag: 'https://restcountries.eu/data/bhs.svg',
+ currency: 'Bahamian dollar'
+ },
+ {
+ name: 'Bahrain',
+ capital: 'Manama',
+ languages: ['Arabic'],
+ population: 1404900,
+ flag: 'https://restcountries.eu/data/bhr.svg',
+ currency: 'Bahraini dinar'
+ },
+ {
+ name: 'Bangladesh',
+ capital: 'Dhaka',
+ languages: ['Bengali'],
+ population: 161006790,
+ flag: 'https://restcountries.eu/data/bgd.svg',
+ currency: 'Bangladeshi taka'
+ },
+ {
+ name: 'Barbados',
+ capital: 'Bridgetown',
+ languages: ['English'],
+ population: 285000,
+ flag: 'https://restcountries.eu/data/brb.svg',
+ currency: 'Barbadian dollar'
+ },
+ {
+ name: 'Belarus',
+ capital: 'Minsk',
+ languages: ['Belarusian', 'Russian'],
+ population: 9498700,
+ flag: 'https://restcountries.eu/data/blr.svg',
+ currency: 'New Belarusian ruble'
+ },
+ {
+ name: 'Belgium',
+ capital: 'Brussels',
+ languages: ['Dutch', 'French', 'German'],
+ population: 11319511,
+ flag: 'https://restcountries.eu/data/bel.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Belize',
+ capital: 'Belmopan',
+ languages: ['English', 'Spanish'],
+ population: 370300,
+ flag: 'https://restcountries.eu/data/blz.svg',
+ currency: 'Belize dollar'
+ },
+ {
+ name: 'Benin',
+ capital: 'Porto-Novo',
+ languages: ['French'],
+ population: 10653654,
+ flag: 'https://restcountries.eu/data/ben.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Bermuda',
+ capital: 'Hamilton',
+ languages: ['English'],
+ population: 61954,
+ flag: 'https://restcountries.eu/data/bmu.svg',
+ currency: 'Bermudian dollar'
+ },
+ {
+ name: 'Bhutan',
+ capital: 'Thimphu',
+ languages: ['Dzongkha'],
+ population: 775620,
+ flag: 'https://restcountries.eu/data/btn.svg',
+ currency: 'Bhutanese ngultrum'
+ },
+ {
+ name: 'Bolivia (Plurinational State of)',
+ capital: 'Sucre',
+ languages: ['Spanish', 'Aymara', 'Quechua'],
+ population: 10985059,
+ flag: 'https://restcountries.eu/data/bol.svg',
+ currency: 'Bolivian boliviano'
+ },
+ {
+ name: 'Bonaire, Sint Eustatius and Saba',
+ capital: 'Kralendijk',
+ languages: ['Dutch'],
+ population: 17408,
+ flag: 'https://restcountries.eu/data/bes.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Bosnia and Herzegovina',
+ capital: 'Sarajevo',
+ languages: ['Bosnian', 'Croatian', 'Serbian'],
+ population: 3531159,
+ flag: 'https://restcountries.eu/data/bih.svg',
+ currency: 'Bosnia and Herzegovina convertible mark'
+ },
+ {
+ name: 'Botswana',
+ capital: 'Gaborone',
+ languages: ['English', 'Tswana'],
+ population: 2141206,
+ flag: 'https://restcountries.eu/data/bwa.svg',
+ currency: 'Botswana pula'
+ },
+ {
+ name: 'Bouvet Island',
+ capital: '',
+ languages: ['Norwegian', 'Norwegian Bokmål', 'Norwegian Nynorsk'],
+ population: 0,
+ flag: 'https://restcountries.eu/data/bvt.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Brazil',
+ capital: 'Brasília',
+ languages: ['Portuguese'],
+ population: 206135893,
+ flag: 'https://restcountries.eu/data/bra.svg',
+ currency: 'Brazilian real'
+ },
+ {
+ name: 'British Indian Ocean Territory',
+ capital: 'Diego Garcia',
+ languages: ['English'],
+ population: 3000,
+ flag: 'https://restcountries.eu/data/iot.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'United States Minor Outlying Islands',
+ capital: '',
+ languages: ['English'],
+ population: 300,
+ flag: 'https://restcountries.eu/data/umi.svg',
+ currency: 'United States Dollar'
+ },
+ {
+ name: 'Virgin Islands (British)',
+ capital: 'Road Town',
+ languages: ['English'],
+ population: 28514,
+ flag: 'https://restcountries.eu/data/vgb.svg',
+ currency: '[D]'
+ },
+ {
+ name: 'Virgin Islands (U.S.)',
+ capital: 'Charlotte Amalie',
+ languages: ['English'],
+ population: 114743,
+ flag: 'https://restcountries.eu/data/vir.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Brunei Darussalam',
+ capital: 'Bandar Seri Begawan',
+ languages: ['Malay'],
+ population: 411900,
+ flag: 'https://restcountries.eu/data/brn.svg',
+ currency: 'Brunei dollar'
+ },
+ {
+ name: 'Bulgaria',
+ capital: 'Sofia',
+ languages: ['Bulgarian'],
+ population: 7153784,
+ flag: 'https://restcountries.eu/data/bgr.svg',
+ currency: 'Bulgarian lev'
+ },
+ {
+ name: 'Burkina Faso',
+ capital: 'Ouagadougou',
+ languages: ['French', 'Fula'],
+ population: 19034397,
+ flag: 'https://restcountries.eu/data/bfa.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Burundi',
+ capital: 'Bujumbura',
+ languages: ['French', 'Kirundi'],
+ population: 10114505,
+ flag: 'https://restcountries.eu/data/bdi.svg',
+ currency: 'Burundian franc'
+ },
+ {
+ name: 'Cambodia',
+ capital: 'Phnom Penh',
+ languages: ['Khmer'],
+ population: 15626444,
+ flag: 'https://restcountries.eu/data/khm.svg',
+ currency: 'Cambodian riel'
+ },
+ {
+ name: 'Cameroon',
+ capital: 'Yaoundé',
+ languages: ['English', 'French'],
+ population: 22709892,
+ flag: 'https://restcountries.eu/data/cmr.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Canada',
+ capital: 'Ottawa',
+ languages: ['English', 'French'],
+ population: 36155487,
+ flag: 'https://restcountries.eu/data/can.svg',
+ currency: 'Canadian dollar'
+ },
+ {
+ name: 'Cabo Verde',
+ capital: 'Praia',
+ languages: ['Portuguese'],
+ population: 531239,
+ flag: 'https://restcountries.eu/data/cpv.svg',
+ currency: 'Cape Verdean escudo'
+ },
+ {
+ name: 'Cayman Islands',
+ capital: 'George Town',
+ languages: ['English'],
+ population: 58238,
+ flag: 'https://restcountries.eu/data/cym.svg',
+ currency: 'Cayman Islands dollar'
+ },
+ {
+ name: 'Central African Republic',
+ capital: 'Bangui',
+ languages: ['French', 'Sango'],
+ population: 4998000,
+ flag: 'https://restcountries.eu/data/caf.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Chad',
+ capital: "N'Djamena",
+ languages: ['French', 'Arabic'],
+ population: 14497000,
+ flag: 'https://restcountries.eu/data/tcd.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Chile',
+ capital: 'Santiago',
+ languages: ['Spanish'],
+ population: 18191900,
+ flag: 'https://restcountries.eu/data/chl.svg',
+ currency: 'Chilean peso'
+ },
+ {
+ name: 'China',
+ capital: 'Beijing',
+ languages: ['Chinese'],
+ population: 1377422166,
+ flag: 'https://restcountries.eu/data/chn.svg',
+ currency: 'Chinese yuan'
+ },
+ {
+ name: 'Christmas Island',
+ capital: 'Flying Fish Cove',
+ languages: ['English'],
+ population: 2072,
+ flag: 'https://restcountries.eu/data/cxr.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Cocos (Keeling) Islands',
+ capital: 'West Island',
+ languages: ['English'],
+ population: 550,
+ flag: 'https://restcountries.eu/data/cck.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Colombia',
+ capital: 'Bogotá',
+ languages: ['Spanish'],
+ population: 48759958,
+ flag: 'https://restcountries.eu/data/col.svg',
+ currency: 'Colombian peso'
+ },
+ {
+ name: 'Comoros',
+ capital: 'Moroni',
+ languages: ['Arabic', 'French'],
+ population: 806153,
+ flag: 'https://restcountries.eu/data/com.svg',
+ currency: 'Comorian franc'
+ },
+ {
+ name: 'Congo',
+ capital: 'Brazzaville',
+ languages: ['French', 'Lingala'],
+ population: 4741000,
+ flag: 'https://restcountries.eu/data/cog.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Congo (Democratic Republic of the)',
+ capital: 'Kinshasa',
+ languages: ['French', 'Lingala', 'Kongo', 'Swahili', 'Luba-Katanga'],
+ population: 85026000,
+ flag: 'https://restcountries.eu/data/cod.svg',
+ currency: 'Congolese franc'
+ },
+ {
+ name: 'Cook Islands',
+ capital: 'Avarua',
+ languages: ['English'],
+ population: 18100,
+ flag: 'https://restcountries.eu/data/cok.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Costa Rica',
+ capital: 'San José',
+ languages: ['Spanish'],
+ population: 4890379,
+ flag: 'https://restcountries.eu/data/cri.svg',
+ currency: 'Costa Rican colón'
+ },
+ {
+ name: 'Croatia',
+ capital: 'Zagreb',
+ languages: ['Croatian'],
+ population: 4190669,
+ flag: 'https://restcountries.eu/data/hrv.svg',
+ currency: 'Croatian kuna'
+ },
+ {
+ name: 'Cuba',
+ capital: 'Havana',
+ languages: ['Spanish'],
+ population: 11239004,
+ flag: 'https://restcountries.eu/data/cub.svg',
+ currency: 'Cuban convertible peso'
+ },
+ {
+ name: 'Curaçao',
+ capital: 'Willemstad',
+ languages: ['Dutch', '(Eastern) Punjabi', 'English'],
+ population: 154843,
+ flag: 'https://restcountries.eu/data/cuw.svg',
+ currency: 'Netherlands Antillean guilder'
+ },
+ {
+ name: 'Cyprus',
+ capital: 'Nicosia',
+ languages: ['Greek (modern)', 'Turkish', 'Armenian'],
+ population: 847000,
+ flag: 'https://restcountries.eu/data/cyp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Czech Republic',
+ capital: 'Prague',
+ languages: ['Czech', 'Slovak'],
+ population: 10558524,
+ flag: 'https://restcountries.eu/data/cze.svg',
+ currency: 'Czech koruna'
+ },
+ {
+ name: 'Denmark',
+ capital: 'Copenhagen',
+ languages: ['Danish'],
+ population: 5717014,
+ flag: 'https://restcountries.eu/data/dnk.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Djibouti',
+ capital: 'Djibouti',
+ languages: ['French', 'Arabic'],
+ population: 900000,
+ flag: 'https://restcountries.eu/data/dji.svg',
+ currency: 'Djiboutian franc'
+ },
+ {
+ name: 'Dominica',
+ capital: 'Roseau',
+ languages: ['English'],
+ population: 71293,
+ flag: 'https://restcountries.eu/data/dma.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Dominican Republic',
+ capital: 'Santo Domingo',
+ languages: ['Spanish'],
+ population: 10075045,
+ flag: 'https://restcountries.eu/data/dom.svg',
+ currency: 'Dominican peso'
+ },
+ {
+ name: 'Ecuador',
+ capital: 'Quito',
+ languages: ['Spanish'],
+ population: 16545799,
+ flag: 'https://restcountries.eu/data/ecu.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Egypt',
+ capital: 'Cairo',
+ languages: ['Arabic'],
+ population: 91290000,
+ flag: 'https://restcountries.eu/data/egy.svg',
+ currency: 'Egyptian pound'
+ },
+ {
+ name: 'El Salvador',
+ capital: 'San Salvador',
+ languages: ['Spanish'],
+ population: 6520675,
+ flag: 'https://restcountries.eu/data/slv.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Equatorial Guinea',
+ capital: 'Malabo',
+ languages: ['Spanish', 'French'],
+ population: 1222442,
+ flag: 'https://restcountries.eu/data/gnq.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Eritrea',
+ capital: 'Asmara',
+ languages: ['Tigrinya', 'Arabic', 'English'],
+ population: 5352000,
+ flag: 'https://restcountries.eu/data/eri.svg',
+ currency: 'Eritrean nakfa'
+ },
+ {
+ name: 'Estonia',
+ capital: 'Tallinn',
+ languages: ['Estonian'],
+ population: 1315944,
+ flag: 'https://restcountries.eu/data/est.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Ethiopia',
+ capital: 'Addis Ababa',
+ languages: ['Amharic'],
+ population: 92206005,
+ flag: 'https://restcountries.eu/data/eth.svg',
+ currency: 'Ethiopian birr'
+ },
+ {
+ name: 'Falkland Islands (Malvinas)',
+ capital: 'Stanley',
+ languages: ['English'],
+ population: 2563,
+ flag: 'https://restcountries.eu/data/flk.svg',
+ currency: 'Falkland Islands pound'
+ },
+ {
+ name: 'Faroe Islands',
+ capital: 'Tórshavn',
+ languages: ['Faroese'],
+ population: 49376,
+ flag: 'https://restcountries.eu/data/fro.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Fiji',
+ capital: 'Suva',
+ languages: ['English', 'Fijian', 'Hindi', 'Urdu'],
+ population: 867000,
+ flag: 'https://restcountries.eu/data/fji.svg',
+ currency: 'Fijian dollar'
+ },
+ {
+ name: 'Finland',
+ capital: 'Helsinki',
+ languages: ['Finnish', 'Swedish'],
+ population: 5491817,
+ flag: 'https://restcountries.eu/data/fin.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'France',
+ capital: 'Paris',
+ languages: ['French'],
+ population: 66710000,
+ flag: 'https://restcountries.eu/data/fra.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'French Guiana',
+ capital: 'Cayenne',
+ languages: ['French'],
+ population: 254541,
+ flag: 'https://restcountries.eu/data/guf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'French Polynesia',
+ capital: 'Papeetē',
+ languages: ['French'],
+ population: 271800,
+ flag: 'https://restcountries.eu/data/pyf.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'French Southern Territories',
+ capital: 'Port-aux-Français',
+ languages: ['French'],
+ population: 140,
+ flag: 'https://restcountries.eu/data/atf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Gabon',
+ capital: 'Libreville',
+ languages: ['French'],
+ population: 1802278,
+ flag: 'https://restcountries.eu/data/gab.svg',
+ currency: 'Central African CFA franc'
+ },
+ {
+ name: 'Gambia',
+ capital: 'Banjul',
+ languages: ['English'],
+ population: 1882450,
+ flag: 'https://restcountries.eu/data/gmb.svg',
+ currency: 'Gambian dalasi'
+ },
+ {
+ name: 'Georgia',
+ capital: 'Tbilisi',
+ languages: ['Georgian'],
+ population: 3720400,
+ flag: 'https://restcountries.eu/data/geo.svg',
+ currency: 'Georgian Lari'
+ },
+ {
+ name: 'Germany',
+ capital: 'Berlin',
+ languages: ['German'],
+ population: 81770900,
+ flag: 'https://restcountries.eu/data/deu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Ghana',
+ capital: 'Accra',
+ languages: ['English'],
+ population: 27670174,
+ flag: 'https://restcountries.eu/data/gha.svg',
+ currency: 'Ghanaian cedi'
+ },
+ {
+ name: 'Gibraltar',
+ capital: 'Gibraltar',
+ languages: ['English'],
+ population: 33140,
+ flag: 'https://restcountries.eu/data/gib.svg',
+ currency: 'Gibraltar pound'
+ },
+ {
+ name: 'Greece',
+ capital: 'Athens',
+ languages: ['Greek (modern)'],
+ population: 10858018,
+ flag: 'https://restcountries.eu/data/grc.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Greenland',
+ capital: 'Nuuk',
+ languages: ['Kalaallisut'],
+ population: 55847,
+ flag: 'https://restcountries.eu/data/grl.svg',
+ currency: 'Danish krone'
+ },
+ {
+ name: 'Grenada',
+ capital: "St. George's",
+ languages: ['English'],
+ population: 103328,
+ flag: 'https://restcountries.eu/data/grd.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Guadeloupe',
+ capital: 'Basse-Terre',
+ languages: ['French'],
+ population: 400132,
+ flag: 'https://restcountries.eu/data/glp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Guam',
+ capital: 'Hagåtña',
+ languages: ['English', 'Chamorro', 'Spanish'],
+ population: 184200,
+ flag: 'https://restcountries.eu/data/gum.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Guatemala',
+ capital: 'Guatemala City',
+ languages: ['Spanish'],
+ population: 16176133,
+ flag: 'https://restcountries.eu/data/gtm.svg',
+ currency: 'Guatemalan quetzal'
+ },
+ {
+ name: 'Guernsey',
+ capital: 'St. Peter Port',
+ languages: ['English', 'French'],
+ population: 62999,
+ flag: 'https://restcountries.eu/data/ggy.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Guinea',
+ capital: 'Conakry',
+ languages: ['French', 'Fula'],
+ population: 12947000,
+ flag: 'https://restcountries.eu/data/gin.svg',
+ currency: 'Guinean franc'
+ },
+ {
+ name: 'Guinea-Bissau',
+ capital: 'Bissau',
+ languages: ['Portuguese'],
+ population: 1547777,
+ flag: 'https://restcountries.eu/data/gnb.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Guyana',
+ capital: 'Georgetown',
+ languages: ['English'],
+ population: 746900,
+ flag: 'https://restcountries.eu/data/guy.svg',
+ currency: 'Guyanese dollar'
+ },
+ {
+ name: 'Haiti',
+ capital: 'Port-au-Prince',
+ languages: ['French', 'Haitian'],
+ population: 11078033,
+ flag: 'https://restcountries.eu/data/hti.svg',
+ currency: 'Haitian gourde'
+ },
+ {
+ name: 'Heard Island and McDonald Islands',
+ capital: '',
+ languages: ['English'],
+ population: 0,
+ flag: 'https://restcountries.eu/data/hmd.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Holy See',
+ capital: 'Rome',
+ languages: ['Latin', 'Italian', 'French', 'German'],
+ population: 451,
+ flag: 'https://restcountries.eu/data/vat.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Honduras',
+ capital: 'Tegucigalpa',
+ languages: ['Spanish'],
+ population: 8576532,
+ flag: 'https://restcountries.eu/data/hnd.svg',
+ currency: 'Honduran lempira'
+ },
+ {
+ name: 'Hong Kong',
+ capital: 'City of Victoria',
+ languages: ['English', 'Chinese'],
+ population: 7324300,
+ flag: 'https://restcountries.eu/data/hkg.svg',
+ currency: 'Hong Kong dollar'
+ },
+ {
+ name: 'Hungary',
+ capital: 'Budapest',
+ languages: ['Hungarian'],
+ population: 9823000,
+ flag: 'https://restcountries.eu/data/hun.svg',
+ currency: 'Hungarian forint'
+ },
+ {
+ name: 'Iceland',
+ capital: 'Reykjavík',
+ languages: ['Icelandic'],
+ population: 334300,
+ flag: 'https://restcountries.eu/data/isl.svg',
+ currency: 'Icelandic króna'
+ },
+ {
+ name: 'India',
+ capital: 'New Delhi',
+ languages: ['Hindi', 'English'],
+ population: 1295210000,
+ flag: 'https://restcountries.eu/data/ind.svg',
+ currency: 'Indian rupee'
+ },
+ {
+ name: 'Indonesia',
+ capital: 'Jakarta',
+ languages: ['Indonesian'],
+ population: 258705000,
+ flag: 'https://restcountries.eu/data/idn.svg',
+ currency: 'Indonesian rupiah'
+ },
+ {
+ name: "Côte d'Ivoire",
+ capital: 'Yamoussoukro',
+ languages: ['French'],
+ population: 22671331,
+ flag: 'https://restcountries.eu/data/civ.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Iran (Islamic Republic of)',
+ capital: 'Tehran',
+ languages: ['Persian (Farsi)'],
+ population: 79369900,
+ flag: 'https://restcountries.eu/data/irn.svg',
+ currency: 'Iranian rial'
+ },
+ {
+ name: 'Iraq',
+ capital: 'Baghdad',
+ languages: ['Arabic', 'Kurdish'],
+ population: 37883543,
+ flag: 'https://restcountries.eu/data/irq.svg',
+ currency: 'Iraqi dinar'
+ },
+ {
+ name: 'Ireland',
+ capital: 'Dublin',
+ languages: ['Irish', 'English'],
+ population: 6378000,
+ flag: 'https://restcountries.eu/data/irl.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Isle of Man',
+ capital: 'Douglas',
+ languages: ['English', 'Manx'],
+ population: 84497,
+ flag: 'https://restcountries.eu/data/imn.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Israel',
+ capital: 'Jerusalem',
+ languages: ['Hebrew (modern)', 'Arabic'],
+ population: 8527400,
+ flag: 'https://restcountries.eu/data/isr.svg',
+ currency: 'Israeli new shekel'
+ },
+ {
+ name: 'Italy',
+ capital: 'Rome',
+ languages: ['Italian'],
+ population: 60665551,
+ flag: 'https://restcountries.eu/data/ita.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Jamaica',
+ capital: 'Kingston',
+ languages: ['English'],
+ population: 2723246,
+ flag: 'https://restcountries.eu/data/jam.svg',
+ currency: 'Jamaican dollar'
+ },
+ {
+ name: 'Japan',
+ capital: 'Tokyo',
+ languages: ['Japanese'],
+ population: 126960000,
+ flag: 'https://restcountries.eu/data/jpn.svg',
+ currency: 'Japanese yen'
+ },
+ {
+ name: 'Jersey',
+ capital: 'Saint Helier',
+ languages: ['English', 'French'],
+ population: 100800,
+ flag: 'https://restcountries.eu/data/jey.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Jordan',
+ capital: 'Amman',
+ languages: ['Arabic'],
+ population: 9531712,
+ flag: 'https://restcountries.eu/data/jor.svg',
+ currency: 'Jordanian dinar'
+ },
+ {
+ name: 'Kazakhstan',
+ capital: 'Astana',
+ languages: ['Kazakh', 'Russian'],
+ population: 17753200,
+ flag: 'https://restcountries.eu/data/kaz.svg',
+ currency: 'Kazakhstani tenge'
+ },
+ {
+ name: 'Kenya',
+ capital: 'Nairobi',
+ languages: ['English', 'Swahili'],
+ population: 47251000,
+ flag: 'https://restcountries.eu/data/ken.svg',
+ currency: 'Kenyan shilling'
+ },
+ {
+ name: 'Kiribati',
+ capital: 'South Tarawa',
+ languages: ['English'],
+ population: 113400,
+ flag: 'https://restcountries.eu/data/kir.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Kuwait',
+ capital: 'Kuwait City',
+ languages: ['Arabic'],
+ population: 4183658,
+ flag: 'https://restcountries.eu/data/kwt.svg',
+ currency: 'Kuwaiti dinar'
+ },
+ {
+ name: 'Kyrgyzstan',
+ capital: 'Bishkek',
+ languages: ['Kyrgyz', 'Russian'],
+ population: 6047800,
+ flag: 'https://restcountries.eu/data/kgz.svg',
+ currency: 'Kyrgyzstani som'
+ },
+ {
+ name: "Lao People's Democratic Republic",
+ capital: 'Vientiane',
+ languages: ['Lao'],
+ population: 6492400,
+ flag: 'https://restcountries.eu/data/lao.svg',
+ currency: 'Lao kip'
+ },
+ {
+ name: 'Latvia',
+ capital: 'Riga',
+ languages: ['Latvian'],
+ population: 1961600,
+ flag: 'https://restcountries.eu/data/lva.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Lebanon',
+ capital: 'Beirut',
+ languages: ['Arabic', 'French'],
+ population: 5988000,
+ flag: 'https://restcountries.eu/data/lbn.svg',
+ currency: 'Lebanese pound'
+ },
+ {
+ name: 'Lesotho',
+ capital: 'Maseru',
+ languages: ['English', 'Southern Sotho'],
+ population: 1894194,
+ flag: 'https://restcountries.eu/data/lso.svg',
+ currency: 'Lesotho loti'
+ },
+ {
+ name: 'Liberia',
+ capital: 'Monrovia',
+ languages: ['English'],
+ population: 4615000,
+ flag: 'https://restcountries.eu/data/lbr.svg',
+ currency: 'Liberian dollar'
+ },
+ {
+ name: 'Libya',
+ capital: 'Tripoli',
+ languages: ['Arabic'],
+ population: 6385000,
+ flag: 'https://restcountries.eu/data/lby.svg',
+ currency: 'Libyan dinar'
+ },
+ {
+ name: 'Liechtenstein',
+ capital: 'Vaduz',
+ languages: ['German'],
+ population: 37623,
+ flag: 'https://restcountries.eu/data/lie.svg',
+ currency: 'Swiss franc'
+ },
+ {
+ name: 'Lithuania',
+ capital: 'Vilnius',
+ languages: ['Lithuanian'],
+ population: 2872294,
+ flag: 'https://restcountries.eu/data/ltu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Luxembourg',
+ capital: 'Luxembourg',
+ languages: ['French', 'German', 'Luxembourgish'],
+ population: 576200,
+ flag: 'https://restcountries.eu/data/lux.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Macao',
+ capital: '',
+ languages: ['Chinese', 'Portuguese'],
+ population: 649100,
+ flag: 'https://restcountries.eu/data/mac.svg',
+ currency: 'Macanese pataca'
+ },
+ {
+ name: 'Macedonia (the former Yugoslav Republic of)',
+ capital: 'Skopje',
+ languages: ['Macedonian'],
+ population: 2058539,
+ flag: 'https://restcountries.eu/data/mkd.svg',
+ currency: 'Macedonian denar'
+ },
+ {
+ name: 'Madagascar',
+ capital: 'Antananarivo',
+ languages: ['French', 'Malagasy'],
+ population: 22434363,
+ flag: 'https://restcountries.eu/data/mdg.svg',
+ currency: 'Malagasy ariary'
+ },
+ {
+ name: 'Malawi',
+ capital: 'Lilongwe',
+ languages: ['English', 'Chichewa'],
+ population: 16832910,
+ flag: 'https://restcountries.eu/data/mwi.svg',
+ currency: 'Malawian kwacha'
+ },
+ {
+ name: 'Malaysia',
+ capital: 'Kuala Lumpur',
+ languages: ['Malaysian'],
+ population: 31405416,
+ flag: 'https://restcountries.eu/data/mys.svg',
+ currency: 'Malaysian ringgit'
+ },
+ {
+ name: 'Maldives',
+ capital: 'Malé',
+ languages: ['Divehi'],
+ population: 344023,
+ flag: 'https://restcountries.eu/data/mdv.svg',
+ currency: 'Maldivian rufiyaa'
+ },
+ {
+ name: 'Mali',
+ capital: 'Bamako',
+ languages: ['French'],
+ population: 18135000,
+ flag: 'https://restcountries.eu/data/mli.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Malta',
+ capital: 'Valletta',
+ languages: ['Maltese', 'English'],
+ population: 425384,
+ flag: 'https://restcountries.eu/data/mlt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Marshall Islands',
+ capital: 'Majuro',
+ languages: ['English', 'Marshallese'],
+ population: 54880,
+ flag: 'https://restcountries.eu/data/mhl.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Martinique',
+ capital: 'Fort-de-France',
+ languages: ['French'],
+ population: 378243,
+ flag: 'https://restcountries.eu/data/mtq.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mauritania',
+ capital: 'Nouakchott',
+ languages: ['Arabic'],
+ population: 3718678,
+ flag: 'https://restcountries.eu/data/mrt.svg',
+ currency: 'Mauritanian ouguiya'
+ },
+ {
+ name: 'Mauritius',
+ capital: 'Port Louis',
+ languages: ['English'],
+ population: 1262879,
+ flag: 'https://restcountries.eu/data/mus.svg',
+ currency: 'Mauritian rupee'
+ },
+ {
+ name: 'Mayotte',
+ capital: 'Mamoudzou',
+ languages: ['French'],
+ population: 226915,
+ flag: 'https://restcountries.eu/data/myt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mexico',
+ capital: 'Mexico City',
+ languages: ['Spanish'],
+ population: 122273473,
+ flag: 'https://restcountries.eu/data/mex.svg',
+ currency: 'Mexican peso'
+ },
+ {
+ name: 'Micronesia (Federated States of)',
+ capital: 'Palikir',
+ languages: ['English'],
+ population: 102800,
+ flag: 'https://restcountries.eu/data/fsm.svg',
+ currency: '[D]'
+ },
+ {
+ name: 'Moldova (Republic of)',
+ capital: 'Chișinău',
+ languages: ['Romanian'],
+ population: 3553100,
+ flag: 'https://restcountries.eu/data/mda.svg',
+ currency: 'Moldovan leu'
+ },
+ {
+ name: 'Monaco',
+ capital: 'Monaco',
+ languages: ['French'],
+ population: 38400,
+ flag: 'https://restcountries.eu/data/mco.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Mongolia',
+ capital: 'Ulan Bator',
+ languages: ['Mongolian'],
+ population: 3093100,
+ flag: 'https://restcountries.eu/data/mng.svg',
+ currency: 'Mongolian tögrög'
+ },
+ {
+ name: 'Montenegro',
+ capital: 'Podgorica',
+ languages: ['Serbian', 'Bosnian', 'Albanian', 'Croatian'],
+ population: 621810,
+ flag: 'https://restcountries.eu/data/mne.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Montserrat',
+ capital: 'Plymouth',
+ languages: ['English'],
+ population: 4922,
+ flag: 'https://restcountries.eu/data/msr.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Morocco',
+ capital: 'Rabat',
+ languages: ['Arabic'],
+ population: 33337529,
+ flag: 'https://restcountries.eu/data/mar.svg',
+ currency: 'Moroccan dirham'
+ },
+ {
+ name: 'Mozambique',
+ capital: 'Maputo',
+ languages: ['Portuguese'],
+ population: 26423700,
+ flag: 'https://restcountries.eu/data/moz.svg',
+ currency: 'Mozambican metical'
+ },
+ {
+ name: 'Myanmar',
+ capital: 'Naypyidaw',
+ languages: ['Burmese'],
+ population: 51419420,
+ flag: 'https://restcountries.eu/data/mmr.svg',
+ currency: 'Burmese kyat'
+ },
+ {
+ name: 'Namibia',
+ capital: 'Windhoek',
+ languages: ['English', 'Afrikaans'],
+ population: 2324388,
+ flag: 'https://restcountries.eu/data/nam.svg',
+ currency: 'Namibian dollar'
+ },
+ {
+ name: 'Nauru',
+ capital: 'Yaren',
+ languages: ['English', 'Nauruan'],
+ population: 10084,
+ flag: 'https://restcountries.eu/data/nru.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Nepal',
+ capital: 'Kathmandu',
+ languages: ['Nepali'],
+ population: 28431500,
+ flag: 'https://restcountries.eu/data/npl.svg',
+ currency: 'Nepalese rupee'
+ },
+ {
+ name: 'Netherlands',
+ capital: 'Amsterdam',
+ languages: ['Dutch'],
+ population: 17019800,
+ flag: 'https://restcountries.eu/data/nld.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'New Caledonia',
+ capital: 'Nouméa',
+ languages: ['French'],
+ population: 268767,
+ flag: 'https://restcountries.eu/data/ncl.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'New Zealand',
+ capital: 'Wellington',
+ languages: ['English', 'Māori'],
+ population: 4697854,
+ flag: 'https://restcountries.eu/data/nzl.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Nicaragua',
+ capital: 'Managua',
+ languages: ['Spanish'],
+ population: 6262703,
+ flag: 'https://restcountries.eu/data/nic.svg',
+ currency: 'Nicaraguan córdoba'
+ },
+ {
+ name: 'Niger',
+ capital: 'Niamey',
+ languages: ['French'],
+ population: 20715000,
+ flag: 'https://restcountries.eu/data/ner.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Nigeria',
+ capital: 'Abuja',
+ languages: ['English'],
+ population: 186988000,
+ flag: 'https://restcountries.eu/data/nga.svg',
+ currency: 'Nigerian naira'
+ },
+ {
+ name: 'Niue',
+ capital: 'Alofi',
+ languages: ['English'],
+ population: 1470,
+ flag: 'https://restcountries.eu/data/niu.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Norfolk Island',
+ capital: 'Kingston',
+ languages: ['English'],
+ population: 2302,
+ flag: 'https://restcountries.eu/data/nfk.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: "Korea (Democratic People's Republic of)",
+ capital: 'Pyongyang',
+ languages: ['Korean'],
+ population: 25281000,
+ flag: 'https://restcountries.eu/data/prk.svg',
+ currency: 'North Korean won'
+ },
+ {
+ name: 'Northern Mariana Islands',
+ capital: 'Saipan',
+ languages: ['English', 'Chamorro'],
+ population: 56940,
+ flag: 'https://restcountries.eu/data/mnp.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Norway',
+ capital: 'Oslo',
+ languages: ['Norwegian', 'Norwegian Bokmål', 'Norwegian Nynorsk'],
+ population: 5223256,
+ flag: 'https://restcountries.eu/data/nor.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Oman',
+ capital: 'Muscat',
+ languages: ['Arabic'],
+ population: 4420133,
+ flag: 'https://restcountries.eu/data/omn.svg',
+ currency: 'Omani rial'
+ },
+ {
+ name: 'Pakistan',
+ capital: 'Islamabad',
+ languages: ['English', 'Urdu'],
+ population: 194125062,
+ flag: 'https://restcountries.eu/data/pak.svg',
+ currency: 'Pakistani rupee'
+ },
+ {
+ name: 'Palau',
+ capital: 'Ngerulmud',
+ languages: ['English'],
+ population: 17950,
+ flag: 'https://restcountries.eu/data/plw.svg',
+ currency: '[E]'
+ },
+ {
+ name: 'Palestine, State of',
+ capital: 'Ramallah',
+ languages: ['Arabic'],
+ population: 4682467,
+ flag: 'https://restcountries.eu/data/pse.svg',
+ currency: 'Israeli new sheqel'
+ },
+ {
+ name: 'Panama',
+ capital: 'Panama City',
+ languages: ['Spanish'],
+ population: 3814672,
+ flag: 'https://restcountries.eu/data/pan.svg',
+ currency: 'Panamanian balboa'
+ },
+ {
+ name: 'Papua New Guinea',
+ capital: 'Port Moresby',
+ languages: ['English'],
+ population: 8083700,
+ flag: 'https://restcountries.eu/data/png.svg',
+ currency: 'Papua New Guinean kina'
+ },
+ {
+ name: 'Paraguay',
+ capital: 'Asunción',
+ languages: ['Spanish', 'Guaraní'],
+ population: 6854536,
+ flag: 'https://restcountries.eu/data/pry.svg',
+ currency: 'Paraguayan guaraní'
+ },
+ {
+ name: 'Peru',
+ capital: 'Lima',
+ languages: ['Spanish'],
+ population: 31488700,
+ flag: 'https://restcountries.eu/data/per.svg',
+ currency: 'Peruvian sol'
+ },
+ {
+ name: 'Philippines',
+ capital: 'Manila',
+ languages: ['English'],
+ population: 103279800,
+ flag: 'https://restcountries.eu/data/phl.svg',
+ currency: 'Philippine peso'
+ },
+ {
+ name: 'Pitcairn',
+ capital: 'Adamstown',
+ languages: ['English'],
+ population: 56,
+ flag: 'https://restcountries.eu/data/pcn.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Poland',
+ capital: 'Warsaw',
+ languages: ['Polish'],
+ population: 38437239,
+ flag: 'https://restcountries.eu/data/pol.svg',
+ currency: 'Polish złoty'
+ },
+ {
+ name: 'Portugal',
+ capital: 'Lisbon',
+ languages: ['Portuguese'],
+ population: 10374822,
+ flag: 'https://restcountries.eu/data/prt.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Puerto Rico',
+ capital: 'San Juan',
+ languages: ['Spanish', 'English'],
+ population: 3474182,
+ flag: 'https://restcountries.eu/data/pri.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Qatar',
+ capital: 'Doha',
+ languages: ['Arabic'],
+ population: 2587564,
+ flag: 'https://restcountries.eu/data/qat.svg',
+ currency: 'Qatari riyal'
+ },
+ {
+ name: 'Republic of Kosovo',
+ capital: 'Pristina',
+ languages: ['Albanian', 'Serbian'],
+ population: 1733842,
+ flag: 'https://restcountries.eu/data/kos.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Réunion',
+ capital: 'Saint-Denis',
+ languages: ['French'],
+ population: 840974,
+ flag: 'https://restcountries.eu/data/reu.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Romania',
+ capital: 'Bucharest',
+ languages: ['Romanian'],
+ population: 19861408,
+ flag: 'https://restcountries.eu/data/rou.svg',
+ currency: 'Romanian leu'
+ },
+ {
+ name: 'Russian Federation',
+ capital: 'Moscow',
+ languages: ['Russian'],
+ population: 146599183,
+ flag: 'https://restcountries.eu/data/rus.svg',
+ currency: 'Russian ruble'
+ },
+ {
+ name: 'Rwanda',
+ capital: 'Kigali',
+ languages: ['Kinyarwanda', 'English', 'French'],
+ population: 11553188,
+ flag: 'https://restcountries.eu/data/rwa.svg',
+ currency: 'Rwandan franc'
+ },
+ {
+ name: 'Saint Barthélemy',
+ capital: 'Gustavia',
+ languages: ['French'],
+ population: 9417,
+ flag: 'https://restcountries.eu/data/blm.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Helena, Ascension and Tristan da Cunha',
+ capital: 'Jamestown',
+ languages: ['English'],
+ population: 4255,
+ flag: 'https://restcountries.eu/data/shn.svg',
+ currency: 'Saint Helena pound'
+ },
+ {
+ name: 'Saint Kitts and Nevis',
+ capital: 'Basseterre',
+ languages: ['English'],
+ population: 46204,
+ flag: 'https://restcountries.eu/data/kna.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Saint Lucia',
+ capital: 'Castries',
+ languages: ['English'],
+ population: 186000,
+ flag: 'https://restcountries.eu/data/lca.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Saint Martin (French part)',
+ capital: 'Marigot',
+ languages: ['English', 'French', 'Dutch'],
+ population: 36979,
+ flag: 'https://restcountries.eu/data/maf.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Pierre and Miquelon',
+ capital: 'Saint-Pierre',
+ languages: ['French'],
+ population: 6069,
+ flag: 'https://restcountries.eu/data/spm.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Saint Vincent and the Grenadines',
+ capital: 'Kingstown',
+ languages: ['English'],
+ population: 109991,
+ flag: 'https://restcountries.eu/data/vct.svg',
+ currency: 'East Caribbean dollar'
+ },
+ {
+ name: 'Samoa',
+ capital: 'Apia',
+ languages: ['Samoan', 'English'],
+ population: 194899,
+ flag: 'https://restcountries.eu/data/wsm.svg',
+ currency: 'Samoan tālā'
+ },
+ {
+ name: 'San Marino',
+ capital: 'City of San Marino',
+ languages: ['Italian'],
+ population: 33005,
+ flag: 'https://restcountries.eu/data/smr.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Sao Tome and Principe',
+ capital: 'São Tomé',
+ languages: ['Portuguese'],
+ population: 187356,
+ flag: 'https://restcountries.eu/data/stp.svg',
+ currency: 'São Tomé and Príncipe dobra'
+ },
+ {
+ name: 'Saudi Arabia',
+ capital: 'Riyadh',
+ languages: ['Arabic'],
+ population: 32248200,
+ flag: 'https://restcountries.eu/data/sau.svg',
+ currency: 'Saudi riyal'
+ },
+ {
+ name: 'Senegal',
+ capital: 'Dakar',
+ languages: ['French'],
+ population: 14799859,
+ flag: 'https://restcountries.eu/data/sen.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Serbia',
+ capital: 'Belgrade',
+ languages: ['Serbian'],
+ population: 7076372,
+ flag: 'https://restcountries.eu/data/srb.svg',
+ currency: 'Serbian dinar'
+ },
+ {
+ name: 'Seychelles',
+ capital: 'Victoria',
+ languages: ['French', 'English'],
+ population: 91400,
+ flag: 'https://restcountries.eu/data/syc.svg',
+ currency: 'Seychellois rupee'
+ },
+ {
+ name: 'Sierra Leone',
+ capital: 'Freetown',
+ languages: ['English'],
+ population: 7075641,
+ flag: 'https://restcountries.eu/data/sle.svg',
+ currency: 'Sierra Leonean leone'
+ },
+ {
+ name: 'Singapore',
+ capital: 'Singapore',
+ languages: ['English', 'Malay', 'Tamil', 'Chinese'],
+ population: 5535000,
+ flag: 'https://restcountries.eu/data/sgp.svg',
+ currency: 'Brunei dollar'
+ },
+ {
+ name: 'Sint Maarten (Dutch part)',
+ capital: 'Philipsburg',
+ languages: ['Dutch', 'English'],
+ population: 38247,
+ flag: 'https://restcountries.eu/data/sxm.svg',
+ currency: 'Netherlands Antillean guilder'
+ },
+ {
+ name: 'Slovakia',
+ capital: 'Bratislava',
+ languages: ['Slovak'],
+ population: 5426252,
+ flag: 'https://restcountries.eu/data/svk.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Slovenia',
+ capital: 'Ljubljana',
+ languages: ['Slovene'],
+ population: 2064188,
+ flag: 'https://restcountries.eu/data/svn.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Solomon Islands',
+ capital: 'Honiara',
+ languages: ['English'],
+ population: 642000,
+ flag: 'https://restcountries.eu/data/slb.svg',
+ currency: 'Solomon Islands dollar'
+ },
+ {
+ name: 'Somalia',
+ capital: 'Mogadishu',
+ languages: ['Somali', 'Arabic'],
+ population: 11079000,
+ flag: 'https://restcountries.eu/data/som.svg',
+ currency: 'Somali shilling'
+ },
+ {
+ name: 'South Africa',
+ capital: 'Pretoria',
+ languages: [
+ 'Afrikaans',
+ 'English',
+ 'Southern Ndebele',
+ 'Southern Sotho',
+ 'Swati',
+ 'Tswana',
+ 'Tsonga',
+ 'Venda',
+ 'Xhosa',
+ 'Zulu'
+ ],
+ population: 55653654,
+ flag: 'https://restcountries.eu/data/zaf.svg',
+ currency: 'South African rand'
+ },
+ {
+ name: 'South Georgia and the South Sandwich Islands',
+ capital: 'King Edward Point',
+ languages: ['English'],
+ population: 30,
+ flag: 'https://restcountries.eu/data/sgs.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'Korea (Republic of)',
+ capital: 'Seoul',
+ languages: ['Korean'],
+ population: 50801405,
+ flag: 'https://restcountries.eu/data/kor.svg',
+ currency: 'South Korean won'
+ },
+ {
+ name: 'South Sudan',
+ capital: 'Juba',
+ languages: ['English'],
+ population: 12131000,
+ flag: 'https://restcountries.eu/data/ssd.svg',
+ currency: 'South Sudanese pound'
+ },
+ {
+ name: 'Spain',
+ capital: 'Madrid',
+ languages: ['Spanish'],
+ population: 46438422,
+ flag: 'https://restcountries.eu/data/esp.svg',
+ currency: 'Euro'
+ },
+ {
+ name: 'Sri Lanka',
+ capital: 'Colombo',
+ languages: ['Sinhalese', 'Tamil'],
+ population: 20966000,
+ flag: 'https://restcountries.eu/data/lka.svg',
+ currency: 'Sri Lankan rupee'
+ },
+ {
+ name: 'Sudan',
+ capital: 'Khartoum',
+ languages: ['Arabic', 'English'],
+ population: 39598700,
+ flag: 'https://restcountries.eu/data/sdn.svg',
+ currency: 'Sudanese pound'
+ },
+ {
+ name: 'Suriname',
+ capital: 'Paramaribo',
+ languages: ['Dutch'],
+ population: 541638,
+ flag: 'https://restcountries.eu/data/sur.svg',
+ currency: 'Surinamese dollar'
+ },
+ {
+ name: 'Svalbard and Jan Mayen',
+ capital: 'Longyearbyen',
+ languages: ['Norwegian'],
+ population: 2562,
+ flag: 'https://restcountries.eu/data/sjm.svg',
+ currency: 'Norwegian krone'
+ },
+ {
+ name: 'Swaziland',
+ capital: 'Lobamba',
+ languages: ['English', 'Swati'],
+ population: 1132657,
+ flag: 'https://restcountries.eu/data/swz.svg',
+ currency: 'Swazi lilangeni'
+ },
+ {
+ name: 'Sweden',
+ capital: 'Stockholm',
+ languages: ['Swedish'],
+ population: 9894888,
+ flag: 'https://restcountries.eu/data/swe.svg',
+ currency: 'Swedish krona'
+ },
+ {
+ name: 'Switzerland',
+ capital: 'Bern',
+ languages: ['German', 'French', 'Italian'],
+ population: 8341600,
+ flag: 'https://restcountries.eu/data/che.svg',
+ currency: 'Swiss franc'
+ },
+ {
+ name: 'Syrian Arab Republic',
+ capital: 'Damascus',
+ languages: ['Arabic'],
+ population: 18564000,
+ flag: 'https://restcountries.eu/data/syr.svg',
+ currency: 'Syrian pound'
+ },
+ {
+ name: 'Taiwan',
+ capital: 'Taipei',
+ languages: ['Chinese'],
+ population: 23503349,
+ flag: 'https://restcountries.eu/data/twn.svg',
+ currency: 'New Taiwan dollar'
+ },
+ {
+ name: 'Tajikistan',
+ capital: 'Dushanbe',
+ languages: ['Tajik', 'Russian'],
+ population: 8593600,
+ flag: 'https://restcountries.eu/data/tjk.svg',
+ currency: 'Tajikistani somoni'
+ },
+ {
+ name: 'Tanzania, United Republic of',
+ capital: 'Dodoma',
+ languages: ['Swahili', 'English'],
+ population: 55155000,
+ flag: 'https://restcountries.eu/data/tza.svg',
+ currency: 'Tanzanian shilling'
+ },
+ {
+ name: 'Thailand',
+ capital: 'Bangkok',
+ languages: ['Thai'],
+ population: 65327652,
+ flag: 'https://restcountries.eu/data/tha.svg',
+ currency: 'Thai baht'
+ },
+ {
+ name: 'Timor-Leste',
+ capital: 'Dili',
+ languages: ['Portuguese'],
+ population: 1167242,
+ flag: 'https://restcountries.eu/data/tls.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Togo',
+ capital: 'Lomé',
+ languages: ['French'],
+ population: 7143000,
+ flag: 'https://restcountries.eu/data/tgo.svg',
+ currency: 'West African CFA franc'
+ },
+ {
+ name: 'Tokelau',
+ capital: 'Fakaofo',
+ languages: ['English'],
+ population: 1411,
+ flag: 'https://restcountries.eu/data/tkl.svg',
+ currency: 'New Zealand dollar'
+ },
+ {
+ name: 'Tonga',
+ capital: "Nuku'alofa",
+ languages: ['English', 'Tonga (Tonga Islands)'],
+ population: 103252,
+ flag: 'https://restcountries.eu/data/ton.svg',
+ currency: 'Tongan paʻanga'
+ },
+ {
+ name: 'Trinidad and Tobago',
+ capital: 'Port of Spain',
+ languages: ['English'],
+ population: 1349667,
+ flag: 'https://restcountries.eu/data/tto.svg',
+ currency: 'Trinidad and Tobago dollar'
+ },
+ {
+ name: 'Tunisia',
+ capital: 'Tunis',
+ languages: ['Arabic'],
+ population: 11154400,
+ flag: 'https://restcountries.eu/data/tun.svg',
+ currency: 'Tunisian dinar'
+ },
+ {
+ name: 'Turkey',
+ capital: 'Ankara',
+ languages: ['Turkish'],
+ population: 78741053,
+ flag: 'https://restcountries.eu/data/tur.svg',
+ currency: 'Turkish lira'
+ },
+ {
+ name: 'Turkmenistan',
+ capital: 'Ashgabat',
+ languages: ['Turkmen', 'Russian'],
+ population: 4751120,
+ flag: 'https://restcountries.eu/data/tkm.svg',
+ currency: 'Turkmenistan manat'
+ },
+ {
+ name: 'Turks and Caicos Islands',
+ capital: 'Cockburn Town',
+ languages: ['English'],
+ population: 31458,
+ flag: 'https://restcountries.eu/data/tca.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Tuvalu',
+ capital: 'Funafuti',
+ languages: ['English'],
+ population: 10640,
+ flag: 'https://restcountries.eu/data/tuv.svg',
+ currency: 'Australian dollar'
+ },
+ {
+ name: 'Uganda',
+ capital: 'Kampala',
+ languages: ['English', 'Swahili'],
+ population: 33860700,
+ flag: 'https://restcountries.eu/data/uga.svg',
+ currency: 'Ugandan shilling'
+ },
+ {
+ name: 'Ukraine',
+ capital: 'Kiev',
+ languages: ['Ukrainian'],
+ population: 42692393,
+ flag: 'https://restcountries.eu/data/ukr.svg',
+ currency: 'Ukrainian hryvnia'
+ },
+ {
+ name: 'United Arab Emirates',
+ capital: 'Abu Dhabi',
+ languages: ['Arabic'],
+ population: 9856000,
+ flag: 'https://restcountries.eu/data/are.svg',
+ currency: 'United Arab Emirates dirham'
+ },
+ {
+ name: 'United Kingdom of Great Britain and Northern Ireland',
+ capital: 'London',
+ languages: ['English'],
+ population: 65110000,
+ flag: 'https://restcountries.eu/data/gbr.svg',
+ currency: 'British pound'
+ },
+ {
+ name: 'United States of America',
+ capital: 'Washington, D.C.',
+ languages: ['English'],
+ population: 323947000,
+ flag: 'https://restcountries.eu/data/usa.svg',
+ currency: 'United States dollar'
+ },
+ {
+ name: 'Uruguay',
+ capital: 'Montevideo',
+ languages: ['Spanish'],
+ population: 3480222,
+ flag: 'https://restcountries.eu/data/ury.svg',
+ currency: 'Uruguayan peso'
+ },
+ {
+ name: 'Uzbekistan',
+ capital: 'Tashkent',
+ languages: ['Uzbek', 'Russian'],
+ population: 31576400,
+ flag: 'https://restcountries.eu/data/uzb.svg',
+ currency: "Uzbekistani so'm"
+ },
+ {
+ name: 'Vanuatu',
+ capital: 'Port Vila',
+ languages: ['Bislama', 'English', 'French'],
+ population: 277500,
+ flag: 'https://restcountries.eu/data/vut.svg',
+ currency: 'Vanuatu vatu'
+ },
+ {
+ name: 'Venezuela (Bolivarian Republic of)',
+ capital: 'Caracas',
+ languages: ['Spanish'],
+ population: 31028700,
+ flag: 'https://restcountries.eu/data/ven.svg',
+ currency: 'Venezuelan bolívar'
+ },
+ {
+ name: 'Viet Nam',
+ capital: 'Hanoi',
+ languages: ['Vietnamese'],
+ population: 92700000,
+ flag: 'https://restcountries.eu/data/vnm.svg',
+ currency: 'Vietnamese đồng'
+ },
+ {
+ name: 'Wallis and Futuna',
+ capital: 'Mata-Utu',
+ languages: ['French'],
+ population: 11750,
+ flag: 'https://restcountries.eu/data/wlf.svg',
+ currency: 'CFP franc'
+ },
+ {
+ name: 'Western Sahara',
+ capital: 'El Aaiún',
+ languages: ['Spanish'],
+ population: 510713,
+ flag: 'https://restcountries.eu/data/esh.svg',
+ currency: 'Moroccan dirham'
+ },
+ {
+ name: 'Yemen',
+ capital: "Sana'a",
+ languages: ['Arabic'],
+ population: 27478000,
+ flag: 'https://restcountries.eu/data/yem.svg',
+ currency: 'Yemeni rial'
+ },
+ {
+ name: 'Zambia',
+ capital: 'Lusaka',
+ languages: ['English'],
+ population: 15933883,
+ flag: 'https://restcountries.eu/data/zmb.svg',
+ currency: 'Zambian kwacha'
+ },
+ {
+ name: 'Zimbabwe',
+ capital: 'Harare',
+ languages: ['English', 'Shona', 'Northern Ndebele'],
+ population: 14240168,
+ flag: 'https://restcountries.eu/data/zwe.svg',
+ currency: 'Botswana pula'
+ }
+]
diff --git a/ID/12_Day_Regular_expressions/12_day_starter/index.html b/ID/12_Day_Regular_expressions/12_day_starter/index.html
new file mode 100644
index 0000000..6efcab4
--- /dev/null
+++ b/ID/12_Day_Regular_expressions/12_day_starter/index.html
@@ -0,0 +1,17 @@
+
+
+
+
+ 30DaysOfJavaScript:11 Day
+
+
+
+
30DaysOfJavaScript:11 Day
+
Destructuring and Spread
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/12_Day_Regular_expressions/12_day_starter/scripts/main.js b/ID/12_Day_Regular_expressions/12_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/12_Day_Regular_expressions/12_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/13_Day_Console_object_methods/13_day_console_object_methods.md b/ID/13_Day_Console_object_methods/13_day_console_object_methods.md
new file mode 100644
index 0000000..f17cf29
--- /dev/null
+++ b/ID/13_Day_Console_object_methods/13_day_console_object_methods.md
@@ -0,0 +1,358 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/13_Day_Console_object_methods/13_day_starter/scripts/main.js b/ID/13_Day_Console_object_methods/13_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/13_Day_Console_object_methods/13_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/14_Day_Error_handling/14_day_error_handling.md b/ID/14_Day_Error_handling/14_day_error_handling.md
new file mode 100644
index 0000000..69cb0c0
--- /dev/null
+++ b/ID/14_Day_Error_handling/14_day_error_handling.md
@@ -0,0 +1,193 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/14_Day_Error_handling/14_day_starter/scripts/main.js b/ID/14_Day_Error_handling/14_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/14_Day_Error_handling/14_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/15_Day_Classes/15_day_classes.md b/ID/15_Day_Classes/15_day_classes.md
new file mode 100644
index 0000000..7b46328
--- /dev/null
+++ b/ID/15_Day_Classes/15_day_classes.md
@@ -0,0 +1,715 @@
+
+
+[<< Day 16](../16_Day_JSON/16_day_json.md) | [Day 18 >>](../18_Day_Promises/18_day_promises.md)
+
+
+
+- [Day 17](#day-17)
+ - [HTML5 Web Storage](#html5-web-storage)
+ - [sessionStorage](#sessionstorage)
+ - [localStorage](#localstorage)
+ - [Use case of Web Storages](#use-case-of-web-storages)
+ - [HTML5 Web Storage Objects](#html5-web-storage-objects)
+ - [Setting item to the localStorage](#setting-item-to-the-localstorage)
+ - [Getting item from localStorage](#getting-item-from-localstorage)
+ - [Clearing the localStorage](#clearing-the-localstorage)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# Day 17
+
+## HTML5 Web Storage
+
+Web Storage(sessionStorage and localStorage) is a new HTML5 API offering important benefits over traditional cookies. Before HTML5, application data had to be stored in cookies, included in every server request. Web storage is more secure, and large amounts of data can be stored locally, without affecting website performance. The data storage limit of cookies in many web browsers is about 4 KB per cookie. We Storages can store far larger data (at least 5MB) and never transferred to the server. All sites from the same or one origin can store and access the same data.
+
+The data being stored can be accessed using JavaScript, which gives you the ability to leverage client-side scripting to do many things that have traditionally involved server-side programming and relational databases. The are are two Web Storage objects:
+
+- sessionStorage
+- localStorage
+
+localStorage is similar to sessionStorage, except that while data stored in localStorage has no expiration time, data stored in sessionStorage gets cleared when the page session ends — that is, when the page is closed.
+
+It should be noted that data stored in either localStorage or sessionStorage is specific to the protocol of the page.
+
+The keys and the values are always strings (note that, as with objects, integer keys will be automatically converted to strings).
+
+
+
+### sessionStorage
+
+sessionStorage is only available within the browser tab or window session. It’s designed to store data in a single web page session. That means if the window is closed the session data will be removed. Since sessionStorage and localStorage has similar methods, we will focus only on localStorage.
+
+### localStorage
+
+The HTML5 localStorage is the para of the web storage API which is used to store data on the browser with no expiration data. The data will be available on the browser even after the browser is closed. localStorage is kept even between browser sessions. This means data is still available when the browser is closed and reopened, and also instantly between tabs and windows.
+
+Web Storage data is, in both cases, not available between different browsers. For example, storage objects created in Firefox cannot be accessed in Internet Explorer, exactly like cookies. There are five methods to work on local storage:
+_setItem(), getItem(), removeItem(), clear(), key()_
+
+### Use case of Web Storages
+
+Some use case of Web Storages are
+
+- store data temporarily
+- saving products that the user places in his shopping cart
+- data can be made available between page requests, multiple browser tabs, and also between browser sessions using localStorage
+- can be used offline completely using localStorage
+- Web Storage can be a great performance win when some static data is stored on the client to minimize the number of subsequent requests. Even images can be stored in strings using Base64 encoding.
+- can be used for user authentication method
+
+For the examples mentioned above, it makes sense to use localStorage. You may be wondering, then, when we should use sessionStorage.
+
+In cases, we want to to get rid of the data as soon as the window is closed. Or, perhaps, if we do not want the application to interfere with the same application that’s open in another window. These scenarios are served best with sessionStorage.
+
+Now, let use how use make use of these Web Storage APIs.
+
+## HTML5 Web Storage Objects
+
+HTML web storage provides two objects for storing data on the client:
+
+- window.localStorage - stores data with no expiration date
+- window.sessionStorage - stores data for one session (data is lost when the browser tab is closed)Most modern browsers support Web Storage, however it is good to check browser support for localStorage and sessionStorage. Let us see the available methods for the Web Storage objects.
+
+Web Storage objects:
+
+- _localStorage_ - to display the localStorage object
+- _localStorage.clear()_ - to remove everything in the local storage
+- _localStorage.setItem()_ - to storage data in the localStorage. It takes a key and a value parameters.
+- _localStorage.getItem()_ - to display data stored in the localStorage. It takes a key as a parameter.
+- _localStorage.removeItem()_ - to remove stored item form a localStorage. It takes key as a parameter.
+- _localStorage.key()_ - to display a data stored in a localStorage. It takes index as a parameter.
+
+
+
+### Setting item to the localStorage
+
+When we set data to be stored in a localStorage, it will be stored as a string. If we are storing an array or an object, we should stringify it first to keep the format unless otherwise we lose the array structure or the object structure of the original data.
+
+We store data in the localStorage using the _localStorage.setItem_ method.
+
+```js
+//syntax
+localStorage.setItem('key', 'value')
+```
+
+- Storing string in a localStorage
+
+```js
+localStorage.setItem('firstName', 'Asabeneh') // since the value is string we do not stringify it
+console.log(localStorage)
+```
+
+```sh
+Storage {firstName: 'Asabeneh', length: 1}
+```
+
+- Storing number in a local storage
+
+```js
+localStorage.setItem('age', 200)
+console.log(localStorage)
+```
+
+```sh
+ Storage {age: '200', firstName: 'Asabeneh', length: 2}
+```
+
+- Storing an array in a localStorage. If we are storing an array, an object or object array, we should stringify the object first. See the example below.
+
+```js
+const skills = ['HTML', 'CSS', 'JS', 'React']
+//Skills array has to be stringified first to keep the format.
+const skillsJSON = JSON.stringify(skills, undefined, 4)
+localStorage.setItem('skills', skillsJSON)
+console.log(localStorage)
+```
+
+```sh
+Storage {age: '200', firstName: 'Asabeneh', skills: 'HTML,CSS,JS,React', length: 3}
+```
+
+```js
+let skills = [
+ { tech: 'HTML', level: 10 },
+ { tech: 'CSS', level: 9 },
+ { tech: 'JS', level: 8 },
+ { tech: 'React', level: 9 },
+ { tech: 'Redux', level: 10 },
+ { tech: 'Node', level: 8 },
+ { tech: 'MongoDB', level: 8 }
+]
+
+let skillJSON = JSON.stringify(skills)
+localStorage.setItem('skills', skillJSON)
+```
+
+- Storing an object in a localStorage. Before we storage objects to a localStorage, the object has to be stringified.
+
+```js
+const user = {
+ firstName: 'Asabeneh',
+ age: 250,
+ skills: ['HTML', 'CSS', 'JS', 'React']
+}
+
+const userText = JSON.stringify(user, undefined, 4)
+localStorage.setItem('user', userText)
+```
+
+### Getting item from localStorage
+
+We get data from the local storage using _localStorage.getItem()_ method.
+
+```js
+//syntax
+localStorage.getItem('key')
+```
+
+```js
+let firstName = localStorage.getItem('firstName')
+let age = localStorage.getItem('age')
+let skills = localStorage.getItem('skills')
+console.log(firstName, age, skills)
+```
+
+```sh
+ 'Asabeneh', '200', '['HTML','CSS','JS','React']'
+```
+
+As you can see the skill is in a string format. Let us use JSON.parse() to parse it to normal array.
+
+```js
+let skills = localStorage.getItem('skills')
+let skillsObj = JSON.parse(skills, undefined, 4)
+console.log(skillsObj)
+```
+
+```sh
+['HTML','CSS','JS','React']
+```
+
+### Clearing the localStorage
+
+The clear method, will clear everything stored in the local storage
+
+```js
+localStorage.clear()
+```
+
+🌕 You are determined .Now, you knew a Web Storages and you knew how to store small data on client browsers. You are 17 steps a head to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## Exercises
+
+### Exercises: Level 1
+
+1. Store you first name, last name, age, country, city in your browser localStorage.
+
+### Exercises: Level 2
+
+1. Create a student object. The student object will have first name, last name, age, skills, country, enrolled keys and values for the keys. Store the student object in your browser localStorage.
+
+### Exercises: Level 3
+
+1. Create an object 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 also a set of expenses and its description.
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 16](../16_Day_JSON/16_day_json.md) | [Day 18 >>](../18_Day_Promises/18_day_promises.md)
diff --git a/ID/18_Day_Promises/18_day_promises.md b/ID/18_Day_Promises/18_day_promises.md
new file mode 100644
index 0000000..6d7be2a
--- /dev/null
+++ b/ID/18_Day_Promises/18_day_promises.md
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/18_Day_Promises/18_day_starter/scripts/main.js b/ID/18_Day_Promises/18_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/18_Day_Promises/18_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/19_Day_Closures/19_day_closures.md b/ID/19_Day_Closures/19_day_closures.md
new file mode 100644
index 0000000..4c96016
--- /dev/null
+++ b/ID/19_Day_Closures/19_day_closures.md
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/20_Day_Writing_clean_codes/20_day_starter/scripts/main.js b/ID/20_Day_Writing_clean_codes/20_day_starter/scripts/main.js
new file mode 100644
index 0000000..c6045c8
--- /dev/null
+++ b/ID/20_Day_Writing_clean_codes/20_day_starter/scripts/main.js
@@ -0,0 +1,2 @@
+console.log(countries)
+alert('Open the console and check if the countries has been loaded')
\ No newline at end of file
diff --git a/ID/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md b/ID/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
new file mode 100644
index 0000000..50ed23a
--- /dev/null
+++ b/ID/20_Day_Writing_clean_codes/20_day_writing_clean_codes.md
@@ -0,0 +1,359 @@
+
+
+[<< Day 19](../19_Day_Closuers/19_day_closures.md) | [Day 21 >>](../21_Day_DOM/21_day_dom.md)
+
+
+- [Day 20](#day-20)
+ - [Writing clean code](#writing-clean-code)
+ - [JavaScript Style Guide](#javascript-style-guide)
+ - [Why we need style guide](#why-we-need-style-guide)
+ - [Airbnb JavaScript Style Guide](#airbnb-javascript-style-guide)
+ - [Standard JavaScript Style Guide](#standard-javascript-style-guide)
+ - [Google JavaScript Style Guide](#google-javascript-style-guide)
+ - [JavaScript Coding Conventions](#javascript-coding-conventions)
+ - [Conventions use in 30DaysOfJavaScript](#conventions-use-in-30daysofjavascript)
+ - [Variables](#variables)
+ - [Arrays](#arrays)
+ - [Functions](#functions)
+ - [Loops](#loops)
+ - [Objects](#objects)
+ - [Conditional](#conditional)
+ - [Classes](#classes)
+
+# Day 20
+
+## Writing clean code
+
+### JavaScript Style Guide
+
+A JavaScript style guide is a set of standards that tells how JavaScript code should be written and organized. In this section, we will talk about JavaScript guides and how to write a clean code.
+
+JavaScript is a programming language and like human language it has syntax. The syntax of JavaScript has to be written following a certain style guideline for sake of convince and simplicity.
+
+### Why we need style guide
+
+You have been coding alone for so long but now it seems to work in a team. It does not matter in anyway you write you code as long as it running, however when you work in team of 10 or 20 or more developer on one project and on the same code base, the code will be messy and hard to manage if there is no any guidelines to follow.
+
+You can develop your own guidelines and conventions or you can also adapt well developed guidelines. Let us the most common know guidelines.
+Most common JavaScript Style Guides
+
+- Airbnb JavaScript Style Guide
+- JavaScript Standard Style Guide
+- Google JavaScript Style Guide
+
+#### Airbnb JavaScript Style Guide
+
+Airbnb has one of the most popular JavaScript style guides on the internet. It covers nearly every aspect of JavaScript as well and it is adopted by many developer and companies. You may checkout the [Airbnb style guide](https://github.com/airbnb/javascript). I would also recommend to try it. Their style is very easy to use and simple to understand.
+
+#### Standard JavaScript Style Guide
+
+This is guideline is not as popular as Airbnb but it worth to look at it. They removed the semicolon in their [style guide](https://standardjs.com/).
+
+#### Google JavaScript Style Guide
+
+I do not say much about Googles guideline and I did not use rather I would suggest you to have a look from this [link](https://google.github.io/styleguide/jsguide.html).
+
+### JavaScript Coding Conventions
+
+In this challenge also we used the general JavaScript coding writing conventions and guides. Coding conventions are style guidelines for programming which are developed by an individual, a team or a company.
+
+Coding conventions helps:
+
+- to write clean code
+- to improve code readability
+- to improve code re-useability and maintainability
+
+Coding conventions includes
+
+- Naming and declaration rules for variables
+- Naming and declaration rules for functions
+- Rules for the use of white space, indentation, and comments
+- Programming practices and principles
+
+#### Conventions use in 30DaysOfJavaScript
+
+In this challenge we follow the regular JavaScript convention but I added also my preference of writing.
+
+- We used camelCase for variables and functions.
+- All variable names start with a letter.
+- We chose to use *const* for constants, arrays, objects and functions. In stead of double quote, we chose to use single quote or backtick. Single quote is becoming trendy.
+- We also removed semicolons from our code but it is a matter of personal preference.
+- Space around arithmetic operators, assignment operators and after comma
+- Arrow function instead of function declaration
+- Explicit return instead of implicit return if the function is one liner
+- No trailing comma in the last value of an object
+- We prefer this +=, -=, *= /=, **= instead of the longer version
+- When we use console.log() it is good to print with a tag string to identify from where the console is coming
+
+#### Variables
+
+```js
+
+let firstName = 'Asabeneh'
+let lastName = 'Yetayeh'
+let country = 'Finland'
+let city = 'Helsinki'
+
+const PI = Math.PI
+const gravity = 9.81
+```
+
+#### Arrays
+
+We chose to make array names plural
+
+- names
+- numbers
+- countries
+- languages
+- skills
+- fruits
+- vegetables
+
+```js
+// arrays
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+const numbers = [0, 3.14, 9.81, 37, 98.6, 100]
+const countries = ['Finland', 'Denmark', 'Sweden', 'Norway', 'Iceland']
+const languages = ['Amharic', 'Arabic', 'English', 'French', 'Spanish']
+const skills = ['HTML', 'CSS', 'JavaScript', 'React', 'Python']
+const fruits = ['banana', 'orange', 'mango', 'lemon']
+const vegetables = ['Tomato', 'Potato', 'Cabbage', 'Onion', 'Carrot']
+```
+
+#### Functions
+
+By now you are very familiar function declaration, expression function, arrow function and anonymous function. In this challenge we tend to use arrow function instead of other functions. Arrow function is not a replacement for other functions. In addition, arrow functions and function declarations are not exactly the same. So you should know when to use and when not. I will cover the difference in detail in other sections. We will use explicit return instead of implicit return if the function is one liner
+
+```js
+// function which prints full name of a person
+const printFullName = (firstName, lastName) => firstName + ' ' + lastName
+
+// function which calculate a square of a number
+const square = (n) => n * n
+
+// a function which generate random hexa colors
+const hexaColor = () => {
+ const str = '0123456789abcdef'
+ let hexa = '#'
+ let index
+ for (let i = 0; i < 6; i++) {
+ index = Math.floor(Math.random() * str.length)
+ hexa += str[index]
+ }
+ return hexa
+}
+
+// a function which shows date and time
+const showDateTime = () => {
+ const now = new Date()
+ const year = now.getFullYear()
+ const month = now.getMonth() + 1
+ const date = now.getDate()
+ let hours = now.getHours()
+ let minutes = now.getMinutes()
+ if (hours < 10) {
+ hours = '0' + hours
+ }
+ if (minutes < 10) {
+ minutes = '0' + minutes
+ }
+
+ const dateMonthYear = date + '.' + month + '.' + year
+ const time = hours + ':' + minutes
+ const fullTime = dateMonthYear + ' ' + time
+ return fullTime
+}
+```
+
+#### Loops
+
+We coverer many types of loops in this challenges. The regular for loop, while loop, do while loop, for of loop, forEach loop and for in loop.
+Lets see how we use them:
+
+```js
+for (let i = 0; i < n; i++){
+ console.log()
+}
+
+// declaring an array variable
+const names = ['Asabeneh', 'Mathias', 'Elias', 'Brook']
+
+// iterating an array using regular for loop
+let len = names.length;
+for(let i = 0; i < len; i++){
+ console.log(names[i].toUpperCas())
+}
+
+
+// iterating an array using for of
+for( const name of names) {
+ console.log(name.toUpperCase())
+}
+
+// iterating array using forEach
+names.forEach((name) => name.toUpperCase())
+
+
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+for(const key in user) {
+ console.log(key)
+}
+
+```
+
+#### Objects
+
+We declare object literal with *const*.
+
+```js
+// declaring object literal
+const person = {
+ firstName: 'Asabeneh',
+ lastName: 'Yetayeh',
+ age: 250,
+ country: 'Finland',
+ city: 'Helsinki',
+ skills: ['HTML','CSS','JavaScript','React','Node','MongoDB','Python','D3.js'],
+ isMarried: true
+}
+// iterating through object keys
+for(const key in person) {
+ console.log(key, person[key])
+}
+
+
+```
+
+#### Conditional
+
+ We say if, if else, if else if else, switch and ternary operators in previous challenges.
+
+ ```js
+ // syntax
+if (condition) {
+ // this part of code run for truthy condition
+} else {
+ // this part of code run for false condition
+}
+ ```
+
+ ```js
+ // if else
+let num = 3
+if (num > 0) {
+ console.log(`${num} is a positive number`)
+} else {
+ console.log(`${num} is a negative number`)
+}
+// 3 is a positive number
+ ```
+
+ ```js
+ // if else if else if else
+
+let a = 0
+if (a > 0) {
+ console.log(`${a} is a positive number`)
+} else if (a < 0) {
+ console.log(`${a} is a negative number`)
+} else if (a == 0) {
+ console.log(`${a} is zero`)
+} else {
+ console.log(`${a} is not a number`)
+}
+ ```
+
+ ```js
+ // Switch More Examples
+let dayUserInput = prompt('What day is today ?')
+let day = dayUserInput.toLowerCase()
+
+switch (day) {
+ case 'monday':
+ console.log('Today is Monday')
+ break
+ case 'tuesday':
+ console.log('Today is Tuesday')
+ break
+ case 'wednesday':
+ console.log('Today is Wednesday')
+ break
+ case 'thursday':
+ console.log('Today is Thursday')
+ break
+ case 'friday':
+ console.log('Today is Friday')
+ break
+ case 'saturday':
+ console.log('Today is Saturday')
+ break
+ case 'sunday':
+ console.log('Today is Sunday')
+ break
+ default:
+ console.log('It is not a week day.')
+}
+ ```
+
+ ```js
+ // ternary
+
+ let isRaining = true
+isRaining
+ ? console.log('You need a rain coat.')
+ : console.log('No need for a rain coat.')
+ ```
+
+#### Classes
+
+We declare class with CamelCase which starts with capital letter.
+
+```js
+// syntax
+class ClassName {
+ // code goes here
+}
+```
+
+```js
+// defining class
+class Person {
+ constructor(firstName, lastName) {
+ console.log(this) // Check the output from here
+ this.firstName = firstName
+ this.lastName = lastName
+ }
+}
+
+```
+
+Whatever style guide you follow be consistent. Follow some programming paradigms and design patterns. Remember, if you do not write you code in certain order or fashion it will be hard to read your code. So, do a favor for yourself or for someone who is going to read your code by writing readable code.
+
+🌕 You are tidy. Now, you knew how to write clean code, so anyone who know the English language can understand your code. You are always progressing and you are a head of 20 steps to your way to greatness.
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 19](../19_Day_Closuers/19_day_closures.md) | [Day 21 >>](../21_Day_DOM/21_day_dom.md)
diff --git a/ID/21_Day_DOM/21_day_dom.md b/ID/21_Day_DOM/21_day_dom.md
new file mode 100644
index 0000000..5755391
--- /dev/null
+++ b/ID/21_Day_DOM/21_day_dom.md
@@ -0,0 +1,409 @@
+
+
+[<< Day 20](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) | [Day 22 >>](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md)
+
+
+
+- [Day 21](#day-21)
+ - [Document Object Model (DOM) - Day 1](#document-object-model-dom---day-1)
+ - [Getting Element](#getting-element)
+ - [Getting elements by tag name](#getting-elements-by-tag-name)
+ - [Getting elements by class name](#getting-elements-by-class-name)
+ - [Getting an element by id](#getting-an-element-by-id)
+ - [Getting elements by using querySelector methods](#getting-elements-by-using-queryselector-methods)
+ - [Adding attribute](#adding-attribute)
+ - [Adding attribute using setAttribute](#adding-attribute-using-setattribute)
+ - [Adding attribute without setAttribute](#adding-attribute-without-setattribute)
+ - [Adding class using classList](#adding-class-using-classlist)
+ - [Removing class using remove](#removing-class-using-remove)
+ - [Adding Text to HTML element](#adding-text-to-html-element)
+ - [Adding Text content using textContent](#adding-text-content-using-textcontent)
+ - [Adding Text Content using innHTML](#adding-text-content-using-innhtml)
+ - [Text Content](#text-content)
+ - [Inner HTML](#inner-html)
+ - [Adding style](#adding-style)
+ - [Adding Style Color](#adding-style-color)
+ - [Adding Style Background Color](#adding-style-background-color)
+ - [Adding Style Font Size](#adding-style-font-size)
+ - [Exercises](#exercises)
+ - [Exercise: Level 1](#exercise-level-1)
+ - [Exercise: Level 2](#exercise-level-2)
+ - [Exercise: Level 3](#exercise-level-3)
+ - [DOM: Mini project 1](#dom-mini-project-1)
+
+# Day 21
+
+## Document Object Model (DOM) - Day 1
+
+HTML document is structured as a JavaScript Object. Every HTML element has a different properties which can help to manipulate it. It is possible to get, create, append or remove HTML elements using JavaScript. Check the examples below. Selecting HTML element using JavaScript is similar to selecting using CSS. To select an HTML element, we use tag name, id, class name or other attributes.
+
+### Getting Element
+
+We can access already created element or elements using JavaScript. To access or get elements we use different methods. The code below has four _h1_ elements. Let us see the different methods to access the _h1_ elements.
+
+```html
+
+
+
+ Document Object Model
+
+
+
+
First Title
+
Second Title
+
Third Title
+
+
+
+
+```
+
+#### Getting elements by tag name
+
+**_getElementsByTagName()_**:takes a take name as a string parameter and this method returns an HTMLCollection object. An HTMLCollection is an array like object of HTML elements. The length property provides the size of the collection. Whenever we use this method we access the individual elements using index or after loop through each individual items. An HTMLCollection does not support all array methods therefore we should use regular for loop instead of forEach.
+
+```js
+// syntax
+document.getElementsByTagName('tagname')
+```
+
+```js
+const allTitles = document.getElementsByTagName('h1')
+
+console.log(allTitles) //HTMCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Getting elements by class name
+
+**_getElementsByClassName()_** method returns an HTMLCollection object. An HTMLCollection is an array like list of HTML elements. The length property provides the size of the collection. It is possible to loop through all the HTMLCollection elements. See the example below
+
+```js
+//syntax
+document.getElementsByClassName('classname')
+```
+
+```js
+const allTitles = document.getElementsByClassName('title')
+
+console.log(allTitles) //HTMCollections
+console.log(allTitles.length) // 4
+
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i]) // prints each elements in the HTMLCollection
+}
+```
+
+#### Getting an element by id
+
+**_getElementsById()_** targets a single HTML element. We pass the id without # as an argument.
+
+```js
+//syntax
+document.getElementById('id')
+```
+
+```js
+let firstTitle = document.getElementById('first-title')
+console.log(firstTitle) //
First Title
+```
+
+#### Getting elements by using querySelector methods
+
+The _document.querySelector_ method can select an HTML or HTML elements by tag name, by id or by class name.
+
+**_querySelector_**: can be used to select HTML element by its tag name, id or class. If the tag name is used it selects only the first element.
+
+```js
+let firstTitle = document.querySelector('h1') // select the first available h2 element
+let firstTitle = document.querySelector('#first-title') // select id with first-title
+let firstTitle = document.querySelector('.title') // select the first available h2 element with class title
+```
+
+**_querySelectorAll_**: can be used to select html element by its tag name or class. It return a nodeList which is an array like object which support array methods. We can use **_for loop_** or **_forEach_** to loop through each nodeList elements.
+
+```js
+const allTitles = document.querySelectorAll('h1')
+
+console.log(allTitles.length) // 4
+for (let i = 0; i < allTitles.length; i++) {
+ console.log(allTitles[i])
+}
+
+allTitles.forEach(title => console.log(title))
+const allTitles = document.querySelectorAll('.title') // the same goes for selecting using class
+```
+
+### Adding attribute
+
+An attribute is added in the opening tag of HTML which gives additional information about the element. Common HTML attributes: id, class, src, style, href,disabled, title, alt. Lets add id and class for the fourth title.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].class = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### Adding attribute using setAttribute
+
+The **_setAttribute()_** method set any html attribute. It takes two parameters the type of the attribute and the name of the attribute.
+Let's add class and id attribute for the fourth title.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].setAttribute('class', 'title')
+titles[3].setAttribute('id', 'fourth-title')
+```
+
+#### Adding attribute without setAttribute
+
+We can use normal object setting method to set an attribute but this can not work for all elements. Some attributes are DOM object property and they can be set directly. For instance id and class
+
+```js
+//another way to setting an attribute
+titles[3].className = 'title'
+titles[3].id = 'fourth-title'
+```
+
+#### Adding class using classList
+
+The class list method is a good method to append additional class. It does not override the original class if a class exists rather it adds additional class for the element.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.add('title', 'header-title')
+```
+
+#### Removing class using remove
+
+Similar to adding we can also remove class from an element. We can remove a specific class from an element.
+
+```js
+//another way to setting an attribute: append the class, doesn't over ride
+titles[3].classList.remove('title', 'header-title')
+```
+
+### Adding Text to HTML element
+
+An HTML is a build block of an opening tag, a closing tag and a text content. We can add a text content using the property _textContent_ or \*innerHTML.
+
+#### Adding Text content using textContent
+
+The _textContent_ property is used to add text to an HTML element.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+#### Adding Text Content using innHTML
+
+Most people get confused between _textContent_ and _innerHTML_. _textContent_ is meant to add text to an HTML element, however innerHTML can add a text or HTML element or elements as a child.
+
+##### Text Content
+
+We assign *textContent* HTML object property to a text
+
+```js
+const titles = document.querySelectorAll('h1')
+titles[3].textContent = 'Fourth Title'
+```
+
+##### Inner HTML
+
+We use innerHTML property when we like to replace or a completely new children content to a parent element.
+It value we assign is going to be a string of HTML elements.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
+
+
+
+```
+
+The innerHTML property can allow us also to remove all the children of a parent element. Instead of using removeChild() I would recommend the following method.
+
+```html
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+```
+
+### Adding style
+
+#### Adding Style Color
+
+Let us add some style to our titles. If the element has even index we give it green color else red.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.color = 'green'
+ } else {
+ title.style.color = 'red'
+ }
+})
+```
+
+#### Adding Style Background Color
+
+Let us add some style to our titles. If the element has even index we give it green color else red.
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.backgroundColor = 'green'
+ } else {
+ title.style.backgroundColor = 'red'
+ }
+})
+```
+
+#### Adding Style Font Size
+
+Let us add some style to our titles. If the element has even index we give it 20px else 30px
+
+```js
+const titles = document.querySelectorAll('h1')
+titles.forEach((title, i) => {
+ title.style.fontSize = '24px' // all titles will have 24px font size
+ if (i % 2 === 0) {
+ title.style.fontSize = '20px'
+ } else {
+ title.style.fontSize = '30px'
+ }
+})
+```
+
+As you have notice, the properties of css when we use it in JavaScript is going to be a camelCase. The following CSS properties change from background-color to backgroundColor, font-size to fontSize, font-family to fontFamily, margin-bottom to marginBottom.
+
+---
+
+🌕 Now, you are fully charged with a super power, you have completed the most important and challenging part of the challenge and in general JavaScript. You learned DOM and now you have the capability to build and develop applications. Now do some exercises for your brain and for your muscle.
+
+## Exercises
+
+### Exercise: Level 1
+
+1. Create an index.html file and put four p elements as above: Get the first paragraph by using **_document.querySelector(tagname)_** and tag name
+2. Get get each of the the paragraph using **_document.querySelector('#id')_** and by their id
+3. Get all the p as nodeList using **_document.querySelectorAll(tagname)_** and by their tag name
+4. Loop through the nodeList and get the text content of each paragraph
+5. Set a text content to paragraph the fourth paragraph,**_Fourth Paragraph_**
+6. Set id and class attribute for all the paragraphs using different attribute setting methods
+
+### Exercise: Level 2
+
+1. Change stye of each paragraph using JavaScript(eg. color, background, border, font-size, font-family)
+1. Select all paragraphs and loop through each elements and give the first and third paragraph a color of green, and the second and the fourth paragraph a red color
+1. Set text content, id and class to each paragraph
+
+### Exercise: Level 3
+
+#### DOM: Mini project 1
+
+1. Develop the following application, use the following HTML elements to get started with. You will get the same code on starter folder. Apply all the styles and functionality using JavaScript only.
+
+ - The year color is changing every 1 second
+ - The date and time background color is changing every on seconds
+ - Completed challenge has background green
+ - Ongoing challenge has background yellow
+ - Coming challenges have background red
+
+```html
+
+
+
+
+ JavaScript for Everyone:DOM
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+```
+
+
+
+
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 20](../20_Day_Writing_clean_codes/20_day_writing_clean_codes.md) | [Day 22 >>](../22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md)
diff --git a/ID/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif b/ID/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif
new file mode 100644
index 0000000..0551771
Binary files /dev/null and b/ID/21_Day_DOM/21_day_starter/dom_getting_elements_project_1.gif differ
diff --git a/ID/21_Day_DOM/21_day_starter/index.html b/ID/21_Day_DOM/21_day_starter/index.html
new file mode 100644
index 0000000..ad12ac6
--- /dev/null
+++ b/ID/21_Day_DOM/21_day_starter/index.html
@@ -0,0 +1,26 @@
+
+
+
+
+ 30DaysOfJavaScript:21 Day
+
+
+
+
+
Asabeneh Yetayeh challenges in 2020
+
30DaysOfJavaScript Challenge
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Ongoing
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ID/21_Day_DOM/21_day_starter/scripts/main.js b/ID/21_Day_DOM/21_day_starter/scripts/main.js
new file mode 100644
index 0000000..e69de29
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md b/ID/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md
new file mode 100644
index 0000000..d9e4ad7
--- /dev/null
+++ b/ID/22_Day_Manipulating_DOM_object/22_day_manipulating_DOM_object.md
@@ -0,0 +1,231 @@
+
+
+[<< Day 21](../21_Day_DOM/21_day_dom.md) | [Day 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
+
+
+- [Day 22](#day-22)
+ - [DOM(Document Object Model)-Day 2](#domdocument-object-model-day-2)
+ - [Creating an Element](#creating-an-element)
+ - [Creating elements](#creating-elements)
+ - [Appending child to a parent element](#appending-child-to-a-parent-element)
+ - [Removing a child element from a parent node](#removing-a-child-element-from-a-parent-node)
+ - [Exercises](#exercises)
+ - [Exercises: Level 1](#exercises-level-1)
+ - [Exercises: Level 2](#exercises-level-2)
+ - [Exercises: Level 3](#exercises-level-3)
+
+# Day 22
+
+## DOM(Document Object Model)-Day 2
+
+### Creating an Element
+
+To create an HTML element we use tag name. Creating an HTML element using JavaScript is very simple and straight forward. We use the method _document.createElement()_. The method takes an HTML element tag name as a string parameter.
+
+```js
+// syntax
+document.createElement('tagname')
+```
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### Creating elements
+
+To create multiple elements we should use loop. Using loop we can create as many HTML elements as we want.
+After we create the element we can assign value to the different properties of the HTML object.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+
+```
+
+### Appending child to a parent element
+
+To see a created element on the HTML document we should append it to the parent as a child element. We can access the HTML document body using *document.body*. The *document.body* support the *appendChild()* method. See the example below.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
+
+
+
+```
+
+### Removing a child element from a parent node
+
+After creating an HTML, we may want to remove element or elements and we can use the *removeChild()* method.
+
+**Example:**
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+As we have see in the previous section there is a better way to eliminate all the inner HTML elements or the children of a parent element using the method *innerHTML* properties.
+
+```html
+
+
+
+
+ Document Object Model:30 Days Of JavaScript
+
+
+
+
Removing child Node
+
Asabeneh Yetayeh challenges in 2020
+
+
30DaysOfPython Challenge Done
+
30DaysOfJavaScript Challenge Done
+
30DaysOfReact Challenge Coming
+
30DaysOfFullStack Challenge Coming
+
30DaysOfDataAnalysis Challenge Coming
+
30DaysOfReactNative Challenge Coming
+
30DaysOfMachineLearning Challenge Coming
+
+
+
+
+
+
+```
+
+The above snippet of code cleared all the child elements.
+
+---
+
+🌕 You are so special, you are progressing everyday. Now, you knew how to destroy a created DOM element when it is needed. You learned DOM and now you have the capability to build and develop applications. You are left with only eight days to your way to greatness. Now do some exercises for your brain and for your muscle.
+
+## Exercises
+
+### Exercises: Level 1
+
+1. Create a div container on HTML document and create 100 to 100 numbers dynamically and append to the container div.
+ - Even numbers background is green
+ - Odd numbers background is yellow
+ - Prime numbers background is red
+
+
+
+### Exercises: Level 2
+
+1. Use the countries array to display all the countries.See the design
+
+
+
+### Exercises: Level 3
+
+Check the requirement of this project from both images(jpg and gif). All the data and CSS has been implemented using JavaScript only. The data is found on starter folder project_3. The drop down button has been created using [*details*](https://www.w3schools.com/tags/tag_details.asp) HTML element.
+
+
+
+
+
+🎉 CONGRATULATIONS ! 🎉
+
+[<< Day 21](../21_Day_DOM/21_day_dom.md) | [Day 23 >>](../23_Day_Event_listeners/23_day_event_listeners.md)
\ No newline at end of file
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif
new file mode 100644
index 0000000..0551771
Binary files /dev/null and b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_challenge_info_day_1.1.gif differ
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png
new file mode 100644
index 0000000..ca0e344
Binary files /dev/null and b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_countries_aray_day_2.2.png differ
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png
new file mode 100644
index 0000000..d69a6c2
Binary files /dev/null and b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_min_project_day_number_generators_2.1.png differ
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif
new file mode 100644
index 0000000..571ea6f
Binary files /dev/null and b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.gif differ
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png
new file mode 100644
index 0000000..3387bea
Binary files /dev/null and b/ID/22_Day_Manipulating_DOM_object/22_day_starters/design/dom_mini_project_challenge_info_day_2.3.png differ
diff --git a/ID/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html b/ID/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
new file mode 100644
index 0000000..6855059
--- /dev/null
+++ b/ID/22_Day_Manipulating_DOM_object/22_day_starters/project_1/index.html
@@ -0,0 +1,22 @@
+
+
+
+
+ 30DaysOfJavaScript:22 Day: Number Generator
+
+
+
+