@ -594,23 +594,23 @@ Verrà trattato in un'altra sezione.
The number of evens are 51.
The number of evens are 51.
```
```
14. Write a function which takes any number of arguments and return the sum of the arguments
14. Scrivere una funzione che accetta un numero qualsiasi di argomenti e restituisce la somma degli argomenti.
```js
```js
sum(1, 2, 3) // -> 6
sum(1, 2, 3) // -> 6
sum(1, 2, 3, 4) // -> 10
sum(1, 2, 3, 4) // -> 10
```
```
15. Writ a function which generates a_randomUserIp_.
15. Scrivere una funzione che generi un_randomUserIp_.
16. Write a function which generates a _randomMacAddress_
16. Scrivere una funzione che generi un _randomMacAddress_.
17. Declare a function name _randomHexaNumberGenerator_. When this function is called it generates a random hexadecimal number. The function return the hexadecimal number.
17. Dichiarare il nome di una funzione _randomHexaNumberGenerator_. Quando questa funzione viene chiamata, genera un numero esadecimale casuale. La funzione restituisce il numero esadecimale.
```sh
```sh
console.log(randomHexaNumberGenerator());
console.log(randomHexaNumberGenerator());
'#ee33df'
'#ee33df'
```
```
18. Declare a function name _userIdGenerator_. When this function is called it generates seven character id. The function return the id.
18. Dichiarare il nome della funzione _userIdGenerator_. Quando questa funzione viene chiamata, genera un id di sette caratteri. La funzione restituisce l'id.
```sh
```sh
console.log(userIdGenerator());
console.log(userIdGenerator());
@ -619,7 +619,7 @@ Verrà trattato in un'altra sezione.
### Esercizi: Livello 3
### Esercizi: Livello 3
1. Modify the _userIdGenerator_ function. 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.
1. Modificare la funzione _userIdGenerator_. Dichiarare il nome della funzione _userIdGeneratedByUser_. Non accetta alcun parametro, ma prende due input tramite prompt(). Uno di questi è il numero di caratteri e il secondo è il numero di ID che devono essere generati.
```sh
```sh
userIdGeneratedByUser()
userIdGeneratedByUser()
@ -638,18 +638,18 @@ Verrà trattato in un'altra sezione.
'
'
```
```
2. Write a function name _rgbColorGenerator_ and it generates rgb colors.
2. Scrivete una funzione chiamata _rgbColorGenerator_ che genera i colori rgb.
```sh
```sh
rgbColorGenerator()
rgbColorGenerator()
rgb(125,244,255)
rgb(125,244,255)
```
```
3. Write a function **_arrayOfHexaColors_** which return any number of hexadecimal colors in an array.
3. Scrivere una funzione **_arrayOfHexaColors_** che restituisca un numero qualsiasi di colori esadecimali in un array.
4. Write a function **_arrayOfRgbColors_** which return any number of RGB colors in an array.
4. Scrivete una funzione **_arrayOfRgbColors_** che restituisca un numero qualsiasi di colori RGB in una matrice.
5. Write a function **_convertHexaToRgb_** which converts hexa color to rgb and it returns an rgb color.
5. Scrivere una funzione **_convertHexaToRgb_** che converta il colore hexa in rgb e restituisca un colore rgb.
6. Write a function **_convertRgbToHexa_** which converts rgb to hexa color and it returns an hexa color.
6. Scrivere una funzione **_convertRgbToHexa_** che converta il colore rgb in hexa e restituisca un colore hexa.
7. Write a function **_generateColors_** which can generate any number of hexa or rgb colors.
7. Scrivere una funzione **_generateColors_** che possa generare un numero qualsiasi di colori hexa o rgb.
8. Call your function _shuffleArray_, it takes an array as a parameter and it returns a shuffled array
8. Chiamare la funzione _shuffleArray_, che prende un array come parametro e restituisce un array mescolato.
9. Call your function _factorial_, it takes a whole number as a parameter and it return a factorial of the number
9. Chiamate la vostra funzione _factorial_, che prende un numero intero come parametro e restituisce un fattoriale del numero
10. Call your function _isEmpty_, it takes a parameter and it checks if it is empty or not
10. Chiamate la funzione _isEmpty_, che prende un parametro e controlla se è vuoto o meno.
11. Call your function _sum_, it takes any number of arguments and it returns the sum.
11. Chiamate la funzione _sum_, che accetta un numero qualsiasi di argomenti e restituisce la somma.
12. 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.
12. Scrivete una funzione chiamata _sumOfArrayItems_, che accetta un parametro dell'array e restituisce la somma di tutti gli elementi. Verificare se tutti gli elementi dell'array sono di tipo numero. In caso contrario, restituire un feedback ragionevole.
13. 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.
13. Scrivete una funzione chiamata _media_, che accetta un parametro di array e restituisce la media degli elementi. Verificate se tutti gli elementi dell'array sono di tipo numero. In caso contrario, restituire un feedback ragionevole.
14. 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'.
14. Scrivere una funzione chiamata _modifyArray_ che prenda come parametro un array e modifichi il quinto elemento dell'array e restituisca l'array. Se la lunghezza dell'array è inferiore a cinque, restituisce "elemento non trovato".
@ -690,18 +690,18 @@ Verrà trattato in un'altra sezione.
'Not Found'
'Not Found'
```
```
15. Write a function called _isPrime_, which checks if a number is prime number.
15. Scrivere una funzione chiamata _isPrime_, che verifichi se un numero è un numero primo.
16. Write a functions which checks if all items are unique in the array.
16. Scrivete una funzione che verifichi se tutti gli elementi sono unici nell'array.
17. Write a function which checks if all the items of the array are the same data type.
17. Scrivete una funzione che verifichi se tutti gli elementi dell'array sono dello stesso tipo di dati.
18. 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.
18. Il nome della variabile JavaScript non supporta caratteri speciali o simboli, tranne \$ o \_. Scrivete una funzione **isValidVariable** che controlli se una variabile è valida o non valida.
19. Write a function which returns array of seven random numbers in a range of 0-9. All the numbers must be unique.
19. Scrivete una funzione che restituisca un array di sette numeri casuali in un intervallo compreso tra 0 e 9. Tutti i numeri devono essere unici. Tutti i numeri devono essere unici.
```js
```js
sevenRandomNumbers()
sevenRandomNumbers()
[(1, 4, 5, 7, 9, 8, 0)]
[(1, 4, 5, 7, 9, 8, 0)]
```
```
20. Write a function called reverseCountries, it takes countries array and first it copy the array and returns the reverse of the original array
20. Scrivere una funzione chiamata reverseCountries, che prenda un array di paesi e prima copi l'array e restituisca l'inverso dell'array originale.
- [Creare i metodi di un oggetto](#creating-object-methods)
- [Setting new key for an object](#setting-new-key-for-an-object)
- [Impostare nuove chiavi per un oggetto](#setting-new-key-for-an-object)
- [Object Methods](#object-methods)
- [Metodi della classe Object](#object-methods)
- [Getting object keys using Object.keys()](#getting-object-keys-using-objectkeys)
- [Ottenere le chiavi con Object.keys()](#getting-object-keys-using-objectkeys)
- [Getting object values using Object.values()](#getting-object-values-using-objectvalues)
- [Ottenere i valori con Object.values()](#getting-object-values-using-objectvalues)
- [Getting object keys and values using Object.entries()](#getting-object-keys-and-values-using-objectentries)
- [Ottenere chiavi e valori con Object.entries()](#getting-object-keys-and-values-using-objectentries)
- [Checking properties using hasOwnProperty()](#checking-properties-using-hasownproperty)
- [Controllare le proprietà usando hasOwnProperty()](#checking-properties-using-hasownproperty)
- [💻 Esercizi](#-exercises)
- [💻 Esercizi](#-exercises)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 2](#exercises-level-2)
- [Esercizi: Livello 2](#exercises-level-2)
@ -42,20 +42,20 @@
## Scope
## 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 be declared at different scope. In this section, we will see the scope variables, scope of variables when we use var or let.
La variabile è un elemento fondamentale della programmazione. Dichiariamo una variabile per memorizzare diversi tipi di dati. Per dichiarare una variabile si usano le parole chiave _var_, _let_ e _const_. Una variabile può essere dichiarata in diversi ambiti. In questa sezione vedremo l'ambito delle variabili, l'ambito delle variabili quando usiamo var o let.
Variables scopes can be:
Gli ambiti delle variabili possono essere:
- Global
- Global
- Local
- Local
Variable can be declared globally or locally scope. We will see both global and local scope.
Le variabili possono essere dichiarate a livello globale o locale. Vedremo sia l'ambito globale che quello locale.
Anything declared without let, var or const is scoped at global level.
Qualsiasi cosa dichiarata senza let, var o const ha uno scope globale.
Let us imagine that we have a scope.js file.
Immaginiamo di avere un file scope.js.
### Window Global Object
### Window Global Object
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.
Senza usare console.log(), aprite il browser e verificate: vedrete il valore di a e b se scrivete a o b nel browser. Ciò significa che a e b sono già disponibili nella finestra.
```js
```js
//scope.js
//scope.js
@ -72,7 +72,7 @@ console.log(a, b) // accessible
### Global scope
### 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.
Una variabile dichiarata globalmente può essere accessibile in qualsiasi punto dello stesso file. Ma il termine globale è relativo. Può essere globale al file o globale rispetto a qualche blocco di codice.
```js
```js
//scope.js
//scope.js
@ -93,7 +93,7 @@ console.log(a, b) // JavaScript 10, accessible
### Local scope
### Local scope
A variable declared as local can be accessed only in certain block code.
Una variabile dichiarata come locale può essere accessibile solo in determinati blocchi di codice.
- Block Scope
- Block Scope
- Function Scope
- Function Scope
@ -124,7 +124,7 @@ letsLearnScope()
console.log(a, b) // JavaScript 10, accessible
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 block, etc). Block in JavaScript is a code in between two curly brackets ({}).
Ora avete compreso l'ambito. Una variabile dichiarata con *var* ha un ambito solo per la funzione, mentre una variabile dichiarata con *let* o *const* ha un ambito di blocco (blocco funzione, blocco if, blocco loop, ecc.). Il blocco in JavaScript è un codice compreso tra due parentesi graffe ({}).
```js
```js
//scope.js
//scope.js
@ -148,7 +148,7 @@ console.log(i) // 3
```
```
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.
In ES6 e versioni successive esistono *let* e *const*, per cui non si soffrirà della subdola presenza di *var*. Quando usiamo *let*, la nostra variabile ha uno scope di blocco e non infetterà altre parti del nostro codice.
```js
```js
//scope.js
//scope.js
@ -173,14 +173,14 @@ for(let i = 0; i < 3; i++){
```
```
The scope *let* and *const* are the same. The difference is only reassigning. We can not change or reassign the value of the `const` variable. I would strongly suggest you to use *let* and *const*, by using *let* and *const* you will write 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 an array, object, arrow function and function expression.
Gli ambiti *let* e *const* sono gli stessi. La differenza è solo la riassegnazione. Non possiamo cambiare o riassegnare il valore della variabile `const`. Vi consiglio vivamente di usare *let* e *const*; usando *let* e *const* scriverete codice pulito ed eviterete errori difficili da debuggare. Come regola generale, si può usare *let* per qualsiasi valore che cambia, *const* per qualsiasi valore costante e per un array, un oggetto, una funzione freccia e un'espressione di funzione.
## 📔 Object
## 📔 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.
Tutto può essere un oggetto e gli oggetti hanno proprietà e le proprietà hanno valori, quindi un oggetto è una coppia chiave-valore. L'ordine delle chiavi non è riservato, oppure non c'è un ordine.
To create an object literal, we use two curly brackets.
Per creare un letterale di oggetto, si usano due parentesi graffe.
### Creating an empty object
### Creare un oggetto vuoto
An empty object
An empty object
@ -188,11 +188,11 @@ An empty object
const person = {}
const person = {}
```
```
### Creating an objecting with values
### Creare un oggetto con valori
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.
Ora, l'oggetto persona ha le proprietà firstName, lastName, age, location, skills e isMarried. Il valore delle proprietà o delle chiavi può essere una stringa, un numero, un booleano, un oggetto, null, undefined o una funzione.
Let us see some examples of object. Each key has a value in the object.
Vediamo alcuni esempi di oggetti. Ogni chiave ha un valore nell'oggetto.
```js
```js
const rectangle = {
const rectangle = {
@ -222,12 +222,12 @@ const person = {
console.log(person)
console.log(person)
```
```
### Getting values from an object
### Ottenere i valori dall'oggetto
We can access values of object using two methods:
Possiamo accedere ai valori degli oggetti utilizzando due metodi:
- using . followed by key name if the key-name is a one word
- usando . seguito dal nome della chiave, se il nome della chiave è una sola parola
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:
Ora, l'oggetto persona ha le proprietà getFullName. Il metodo getFullName è una funzione all'interno dell'oggetto persona e lo chiamiamo metodo dell'oggetto. La parola chiave _this_ si riferisce all'oggetto stesso. Possiamo usare la parola _this_ per accedere ai valori di diverse proprietà dell'oggetto. Non possiamo usare una funzione freccia come metodo oggetto, perché la parola this si riferisce alla finestra all'interno di una funzione freccia invece che all'oggetto stesso. Esempio di oggetto:
_Object.values_:To get values of an object as an array
_Object.values_:Per ottenere i valori di un oggetto come array
```js
```js
const values = Object.values(copyPerson)
const values = Object.values(copyPerson)
console.log(values)
console.log(values)
```
```
#### Getting object keys and values using Object.entries()
#### Ottenere chiavi e valori con Object.entries()
_Object.entries_:To get the keys and values in an array
_Object.entries_: Per ottenere le chiavi e i valori di un array
```js
```js
const entries = Object.entries(copyPerson)
const entries = Object.entries(copyPerson)
console.log(entries)
console.log(entries)
```
```
#### Checking properties using hasOwnProperty()
#### Controllare le proprietà usando hasOwnProperty()
_hasOwnProperty_: To check if a specific key or property exist in an object
_hasOwnProperty_: Per verificare se una chiave o una proprietà specifica esiste in un oggetto
```js
```js
console.log(copyPerson.hasOwnProperty('name'))
console.log(copyPerson.hasOwnProperty('name'))
console.log(copyPerson.hasOwnProperty('score'))
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.
🌕 Sei sorprendente. Ora sei super caricato con il potere degli oggetti. Hai appena completato le sfide dell'ottavo giorno e sei a 8 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## 💻 Esercizi
## 💻 Esercizi
### Esercizi: Livello 1
### Esercizi: Livello 1
1. Create an empty object called dog
1. Creare un oggetto vuoto chiamato cane
1. Print the the dog object on the console
1. Stampare l'oggetto cane sulla 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. Aggiungere all'oggetto cane le proprietà nome, zampe, colore, età e abbaio. La proprietà abbaia è un metodo che restituisce _woof woof_.
1. Get name, legs, color, age and bark value from the dog object
1. Ottenere il valore di nome, zampe, colore, età e abbaio dall'oggetto cane
1. Set new properties the dog object: breed, getDogInfo
1. Impostare nuove proprietà per l'oggetto cane: breed, getDogInfo
### Esercizi: Livello 2
### Esercizi: Livello 2
1. Find the person who has many skills in the users object.
1. Individuare la persona che ha molte competenze nell'oggetto utente.
1. Count logged in users, count users having greater than equal to 50 points from the following object.
1. Contare gli utenti connessi, contare gli utenti che hanno più di 50 punti dal seguente oggetto.
1. Find people who are MERN stack developer from the users object
1. Trovare persone che sono sviluppatori di stack MERN dall'oggetto degli utenti
1. Set your name in the users object without modifying the original users object
1. Impostare il proprio nome nell'oggetto utenti senza modificare l'oggetto utenti originale.
1. Get all keys or properties of users object
1. Ottenere tutte le chiavi o le proprietà dell'oggetto users
1. Get all the values of users object
1. Ottenere tutti i valori dell'oggetto users
1. Use the countries object to print a country name, capital, populations and languages.
1. Utilizzare l'oggetto countries per stampare il nome di un paese, la capitale, la popolazione e le lingue.
### Esercizi: Livello 3
### Esercizi: Livello 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.
1. Creare un oggetto letterale chiamato _contopersona_. Ha le proprietà _nome, cognome, entrate, spese_ e i metodi _entrate totali, uscite totali, informazioni sul conto, aggiungi entrate, aggiungi spese_ e _bilancio del conto_. Entrate è un insieme di entrate e relativa descrizione e spese è un insieme di entrate e relativa descrizione.
2. **** Questions:2, 3 and 4 are based on the following two arrays:users and products ()
2. **** Le domande:2, 3 e 4 si basano sui seguenti due array: utenti e prodotti ()
- [Ordinare i valori numbers](#sorting-numeric-values)
- [Sorting Object Arrays](#sorting-object-arrays)
- [Ordinare i valori Object](#sorting-object-arrays)
- [💻 Esercizi](#-exercises)
- [💻 Esercizi](#-exercises)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 2](#exercises-level-2)
- [Esercizi: Livello 2](#exercises-level-2)
@ -47,11 +47,11 @@
## Higher Order Function
## Higher Order Function
Higher order functions are functions which take other function as a parameter or return a function as a value. The function passed as a parameter is called callback.
Le funzioni di ordine superiore sono funzioni che accettano un'altra funzione come parametro o restituiscono una funzione come valore. La funzione passata come parametro è chiamata callback.
### Callback
### Callback
A callback is a function which can be passed as parameter to other function. See the example below.
Un callback è una funzione che può essere passata come parametro ad altre funzioni. Si veda l'esempio seguente.
```js
```js
// a callback function, the name of the function could be any name
// a callback function, the name of the function could be any name
@ -67,9 +67,9 @@ function cube(callback, n) {
console.log(cube(callback, 3))
console.log(cube(callback, 3))
```
```
### Returning function
### restituire una funzione
Higher order functions return function as a value
Le funzioni di ordine superiore restituiscono la funzione come valore
```js
```js
// Higher order function returning an other function
// Higher order function returning an other function
@ -85,7 +85,7 @@ const higherOrder = n => {
console.log(higherOrder(2)(3)(10))
console.log(higherOrder(2)(3)(10))
```
```
Let us see were we use call back functions. For instance the _forEach_ method uses call back.
Vediamo come utilizzare le funzioni di richiamo. Ad esempio, il metodo _forEach_ utilizza il richiamo.
```js
```js
const numbers = [1, 2, 3, 4, 5]
const numbers = [1, 2, 3, 4, 5]
@ -105,7 +105,7 @@ console.log(sumArray(numbers))
15
15
```
```
The above example can be simplified as follows:
L'esempio precedente può essere semplificato come segue:
In JavaScript we can execute some activities in a certain interval of time or we can schedule(wait) for some time to execute some activities.
In JavaScript possiamo eseguire alcune attività in un certo intervallo di tempo oppure possiamo programmare (attendere) l'esecuzione di alcune attività.
- setInterval
- setInterval
- setTimeout
- setTimeout
#### Setting Interval using a setInterval function
#### Impostare un intervallo con la funzione setInterval
In JavaScript, we use setInterval higher order function to do some activity continuously with in some interval of time. The setInterval global method take a callback function and a duration as a parameter. The duration is in milliseconds and the callback will be always called in that interval of time.
In JavaScript, si usa la funzione di ordine superiore setInterval per eseguire un'attività in modo continuo in un certo intervallo di tempo. Il metodo globale setInterval accetta una funzione di callback e una durata come parametro. La durata è espressa in millisecondi e il callback sarà sempre richiamato in quell'intervallo di tempo.
```js
```js
// syntax
// syntax
@ -151,9 +151,9 @@ function sayHello() {
setInterval(sayHello, 1000) // it prints hello in every second, 1000ms is 1s
setInterval(sayHello, 1000) // it prints hello in every second, 1000ms is 1s
```
```
#### Setting a time using a setTimeout
#### Impostare il tempo di esecuzione di una callback con setTimeout
In JavaScript, we use setTimeout higher order function to execute some action at some time in the future. The setTimeout global method take a callback function and a duration as a parameter. The duration is in milliseconds and the callback wait for that amount of time.
In JavaScript, si usa la funzione di ordine superiore setTimeout per eseguire un'azione in un momento futuro. Il metodo globale setTimeout accetta una funzione di callback e una durata come parametro. La durata è espressa in millisecondi e il callback attende per questo lasso di tempo.
```js
```js
// syntax
// syntax
@ -172,11 +172,11 @@ setTimeout(sayHello, 2000) // it prints hello after it waits for 2 seconds.
## Functional Programming
## Functional Programming
Instead of writing regular loop, latest version of JavaScript introduced lots of built in methods which can help us to solve complicated problems. All builtin methods take callback function. In this section, we will see_forEach_, _map_, _filter_, _reduce_, _find_, _every_, _some_, and_sort_.
Invece di scrivere cicli regolari, l'ultima versione di JavaScript ha introdotto molti metodi integrati che possono aiutarci a risolvere problemi complicati. Tutti i metodi incorporati richiedono una funzione di callback. In questa sezione vedremo_forEach_, _map_, _filter_, _reduce_, _find_, _every_, _some_ e_sort_.
### forEach
### forEach
_forEach_: Iterate an array elements. We use _forEach_ only with arrays. It takes a callback function with elements, index parameter and array itself. The index and the array optional.
_forEach_: Itera gli elementi di un array. Si usa _forEach_ solo con gli array. Richiede una funzione di callback con elementi, un parametro indice e l'array stesso. L'indice e l'array sono facoltativi.
```js
```js
arr.forEach(function (element, index, arr) {
arr.forEach(function (element, index, arr) {
@ -232,7 +232,7 @@ ICELAND
### map
### map
_map_: Iterate an array elements and modify the array elements. It takes a callback function with elements, index , array parameter and return a new array.
_map_: Itera gli elementi di un array e modifica gli elementi dell'array. Prende una funzione di callback con elementi, indice, parametro dell'array e restituisce un nuovo array.
_reduce_: Reduce takes a callback function. The call back function takes accumulator, current, and optional initial value as a parameter and returns a single value. It is a good practice to define an initial value for the accumulator value. If we do not specify this parameter, by default accumulator will get array `first value`. If our array is an _empty array_, then `Javascript` will throw an error.
_reduce_: Reduce accetta una funzione di richiamo. La funzione di richiamo prende come parametro l'accumulatore, il valore corrente e il valore iniziale opzionale e restituisce un singolo valore. È buona norma definire un valore iniziale per il valore dell'accumulatore. Se non si specifica questo parametro, per impostazione predefinita l'accumulatore otterrà il "primo valore" dell'array. Se la nostra matrice è una matrice _vuota_, allora `Javascript` lancerà un errore.
```js
```js
arr.reduce((acc, cur) => {
arr.reduce((acc, cur) => {
@ -384,7 +384,7 @@ console.log(sum)
### every
### every
_every_: Check if all the elements are similar in one aspect. It returns boolean
_every_: Controlla se tutti gli elementi sono simili in un aspetto. Restituisce un booleano
_sort_: The sort methods arranges the array elements either ascending or descending order. By default, the **_sort()_** method sorts values as strings.This works well for string array items but not for numbers. If number values are sorted as strings and it give us wrong result. Sort method modify the original array. It is recommended to copy the original data before you start using _sort_ method.
_sort_: I metodi di ordinamento dispongono gli elementi dell'array in ordine crescente o decrescente. Per impostazione predefinita, il metodo **_sort()_** ordina i valori come stringhe, il che funziona bene per gli elementi dell'array di stringhe, ma non per i numeri. Se i valori numerici vengono ordinati come stringhe, il risultato è sbagliato. Il metodo Sort modifica l'array originale. Si consiglia di copiare i dati originali prima di iniziare a usare il metodo _sort_.
As you can see in the example below, 100 came first after sorted in ascending order. Sort converts items to string , since '100' and other numbers compared, 1 which the beginning of the string '100' became the smallest. To avoid this, we use a compare call back function inside the sort method, which return a negative, zero or positive.
Come si può vedere nell'esempio seguente, 100 è arrivato per primo dopo l'ordinamento in ordine crescente. L'ordinamento converte gli elementi in stringhe, poiché '100' e altri numeri sono stati confrontati, 1 che all'inizio della stringa '100' è diventato il più piccolo. Per evitare ciò, utilizziamo una funzione di richiamo di confronto all'interno del metodo sort, che restituisce un valore negativo, zero o positivo.
```js
```js
const numbers = [9.81, 3.14, 100, 37]
const numbers = [9.81, 3.14, 100, 37]
@ -516,9 +516,9 @@ numbers.sort(function (a, b) {
console.log(numbers) //[100, 37, 9.81, 3.14]
console.log(numbers) //[100, 37, 9.81, 3.14]
```
```
#### Sorting Object Arrays
#### Ordinare i valori Object
Whenever we sort objects in an array, we use the object key to compare. Let us see the example below.
Quando si ordinano gli oggetti in una matrice, si utilizza la chiave dell'oggetto da confrontare. Vediamo l'esempio seguente.
🌕 You are doing great.Never give up because great things take time. You have just completed day 9 challenges and you are 9 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
🌕Stai andando alla grande. Non arrenderti mai perché le grandi cose richiedono tempo. Hai appena completato le sfide del nono giorno e sei a 9 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## 💻 Esercizi
## 💻 Esercizi
@ -570,47 +570,47 @@ const products = [
]
]
```
```
1. Explain the difference between **_forEach, map, filter, and reduce_**.
1. Spiegare la differenza tra **_forEach, map, filter e reduce_**.
2. Define a callback function before you use it in forEach, map, filter or reduce.
2. Definire una funzione di callback prima di utilizzarla in forEach, map, filter o reduce.
3. Use **_forEach_** to console.log each country in the countries array.
3. Usate **_forEach_** per registrare in console.log ogni paese nell'array dei paesi.
4. Use **_forEach_** to console.log each name in the names array.
4. Usare **_forEach_** per registrare in console.log ogni nome nell'array dei nomi.
5. Use **_forEach_** to console.log each number in the numbers array.
5. Usare **_forEach_** per registrare in console.log ogni numero nell'array numbers.
6. Use **_map_** to create a new array by changing each country to uppercase in the countries array.
6. Usare **_map_** per creare un nuovo array cambiando ogni paese in maiuscolo nell'array paesi.
7. Use **_map_** to create an array of countries length from countries array.
7. Usare **_map_** per creare un array di paesi di lunghezza pari a quella dell'array paesi.
8. Use **_map_** to create a new array by changing each number to square in the numbers array
8. Usare **_map_** per creare un nuovo array cambiando ogni numero in quadrato nell'array dei numeri.
9. Use **_map_** to change to each name to uppercase in the names array
9. Usare **_map_** per cambiare ogni nome in maiuscolo nell'array dei nomi.
10. Use **_map_** to map the products array to its corresponding prices.
10. Usare **_map_** per mappare l'array dei prodotti ai prezzi corrispondenti.
11. Use **_filter_** to filter out countries containing **_land_**.
11. Utilizzare **_filtro_** per filtrare i paesi contenenti **_terra_**.
12. Use **_filter_** to filter out countries having six character.
12. Usare **_filtro_** per filtrare i paesi con sei caratteri.
13. Use **_filter_** to filter out countries containing six letters and more in the country array.
13. Usare **_filtro_** per filtrare i paesi contenenti sei lettere o più nell'array dei paesi.
14. Use **_filter_** to filter out country start with 'E';
14. Usare **_filter_** per filtrare i paesi che iniziano con 'E';
15. Use **_filter_** to filter out only prices with values.
15. Usare **_filter_** per filtrare solo i prezzi con valori.
16. Declare a function called getStringLists which takes an array as a parameter and then returns an array only with string items.
16. Dichiarare una funzione chiamata getStringLists che accetta un array come parametro e restituisce un array contenente solo elementi stringa.
17. Use **_reduce_** to sum all the numbers in the numbers array.
17. Usare **_reduce_** per sommare tutti i numeri nell'array numbers.
18. Use **_reduce_** to concatenate all the countries and to produce this sentence: **_Estonia, Finland, Sweden, Denmark, Norway, and IceLand are north European countries_**
18. Usare **_reduce_** per concatenare tutti i paesi e produrre questa frase: **_Estonia, Finlandia, Svezia, Danimarca, Norvegia e IceLand sono paesi del Nord Europa_**.
19. Explain the difference between **_some_** and **_every_**
19. Spiegate la differenza tra **alcuni_** e **tutti_**.
20. Use **_some_** to check if some names' length greater than seven in names array
20. Usate **_qualche_** per verificare se la lunghezza di alcuni nomi è maggiore di sette nell'array dei nomi.
21. Use **_every_** to check if all the countries contain the word land
21. Usare **_every_** per verificare se tutti i paesi contengono la parola land (terra).
22. Explain the difference between **_find_** and**_findIndex_**.
22. Spiegate la differenza tra **_find_** e**_findIndex_**.
23. Use **_find_** to find the first country containing only six letters in the countries array
23. Usate **_find_** per trovare il primo paese che contiene solo sei lettere nell'array dei paesi.
24. Use **_findIndex_** to find the position of the first country containing only six letters in the countries array
24. Usare **_findIndex_** per trovare la posizione del primo paese contenente solo sei lettere nell'array dei paesi.
25. Use **_findIndex_** to find the position of **_Norway_** if it doesn't exist in the array you will get -1.
25. Usare **_findIndex_** per trovare la posizione di **_Norvegia_** se non esiste nell'array si otterrà -1.
26. Use **_findIndex_** to find the position of **_Russia_** if it doesn't exist in the array you will get -1.
26. Usare **_findIndex_** per trovare la posizione di **_Russia_** se non esiste nell'array si otterrà -1.
### Esercizi: Livello 2
### Esercizi: Livello 2
1. Find the total price of products by chaining two or more array iterators(eg. arr.map(callback).filter(callback).reduce(callback))
1. Trovare il prezzo totale dei prodotti concatenando due o più iteratori di array (es. arr.map(callback).filter(callback).reduce(callback))
1. Find the sum of price of products using only reduce reduce(callback))
1. Trovare la somma dei prezzi dei prodotti usando solo reduce(callback))
1. Declare a function called **_categorizeCountries_** which returns an array of countries which have some common pattern(you find the countries array in this repository as countries.js(eg 'land', 'ia', 'island','stan')).
1. Dichiarare una funzione chiamata **_categorizeCountries_** che restituisce un array di Paesi che hanno un modello comune (l'array dei Paesi si trova in questo repository come countries.js (ad esempio 'land', 'ia', 'island', 'stan')).
1. Create a function which return an array of objects, which is the letter and the number of times the letter use to start with a name of a country.
1. Creare una funzione che restituisca un array di oggetti, ovvero la lettera e il numero di volte in cui la lettera inizia con il nome di un paese.
1. Declare a **_getFirstTenCountries_** function and return an array of ten countries. Use different functional programming to work on the countries.js array
1. Dichiarare una funzione **_getFirstTenCountries_** e restituire un array di dieci paesi. Utilizzare una programmazione funzionale diversa per lavorare sull'array countries.js
1. Declare a **_getLastTenCountries_** function which which returns the last ten countries in the countries array.
1. Dichiarare una funzione **_getLastTenCountries_** che restituisca gli ultimi dieci paesi dell'array countries.
1. Find out which _letter_ is used many _times_ as initial for a country name from the countries array (eg. Finland, Fiji, France etc)
1. Scoprite quale _lettera_ viene usata molte _volte_ come iniziale del nome di un paese dall'array dei paesi (es. Finlandia, Figi, Francia ecc.).
### Esercizi: Livello 3
### Esercizi: Livello 3
1. Use the countries information, in the data folder. Sort countries by name, by capital, by population
1. Utilizzate le informazioni sui Paesi, contenute nella cartella dei dati. Ordinare i Paesi per nome, per capitale, per popolazione
1. \*\*\* Find the 10 most spoken languages:
1. \*\*\* Trovare le 10 lingue più parlate:
````js
````js
// Your output should look like this
// Your output should look like this
@ -638,7 +638,7 @@ const products = [
````
````
2. \*\*\* Use countries_data.js file create a function which create the ten most populated countries
2. \*\*\* Usare il file countries_data.js per creare una funzione che crei i dieci paesi più popolosi.
3. \*\*\* Try to develop a program which calculate measure of central tendency of a sample(mean, median, mode) and measure of variability(range, variance, standard deviation). In addition to those measures find the min, max, count, percentile, and frequency distribution of the sample. You can create an object called statistics and create all the functions which do statistical calculations as method for the statistics object. Check the output below.
3. \*\*\* Cercate di sviluppare un programma che calcoli la misura della tendenza centrale di un campione (media, mediana, modalità) e la misura della variabilità (intervallo, varianza, deviazione standard). Oltre a queste misure, trovate il minimo, il massimo, il numero, il percentile e la distribuzione di frequenza del campione. È possibile creare un oggetto chiamato statistiche e creare tutte le funzioni che eseguono calcoli statistici come metodi per l'oggetto statistiche. Verificate l'output qui sotto.
Ottenere tutti i valori dalla mappa utilizzando il ciclo
```js
```js
for (const country of countriesMap) {
for (const country of countriesMap) {
@ -378,11 +378,11 @@ Sweden Stockholm
Norway Oslo
Norway Oslo
```
```
🌕 You established a big milestone, you are unstoppable. Keep going! You have just completed day 10 challenges and you are 10 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
🌕 Hai raggiunto un grande traguardo, sei inarrestabile. Continua così! Hai appena completato le sfide del 10° giorno e sei a 10 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## Esercizi
## Esercizi
### Esercizi:Level 1
### Esercizi: Livello 1
```js
```js
const a = [4, 5, 8, 9]
const a = [4, 5, 8, 9]
@ -390,24 +390,24 @@ const b = [3, 4, 5, 7]
const countries = ['Finland', 'Sweden', 'Norway']
const countries = ['Finland', 'Sweden', 'Norway']
```
```
1. create an empty set
1. creare un insieme vuoto
2. Create a set containing 0 to 10 using loop
2. Creare un insieme contenente da 0 a 10 utilizzando il ciclo
3. Remove an element from a set
3. Rimuovere un elemento da un insieme
4. Clear a set
4. Cancellare un insieme
5. Create a set of 5 string elements from array
5. Creare un insieme di 5 elementi stringa da un array
6. Create a map of countries and number of characters of a country
6. Creare una mappa di paesi e il numero di caratteri di un paese
### Esercizi:Level 2
### Esercizi: Livello 2
1. Find a union b
1. Trovare un'unione b
2. Find a intersection b
2. Trovare un'intersezione b
3. Find a with b
3. Trovare a con b
### Esercizi:Level 3
### Esercizi: Livello 3
1. How many languages are there in the countries object file.
1. Quante lingue sono presenti nel file oggetto Paesi.
1. \*\*\* Use the countries data to find the 10 most spoken languages:
1. \*\*\* Utilizzate i dati dei Paesi per trovare le 10 lingue più parlate:
We can not assign variable to all the elements in the array. We can destructure few of the first and we can get the remaining as array using spread operator(...).
Non possiamo assegnare una variabile a tutti gli elementi dell'array. Possiamo destrutturare alcuni dei primi e ottenere i rimanenti come array utilizzando l'operatore spread(...).
```js
```js
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
@ -150,7 +150,7 @@ console.log(rest)
[4, 5, 6, 7, 8, 9, 10]
[4, 5, 6, 7, 8, 9, 10]
```
```
### Destructuring during iteration
### Destructuring durante iterazione
```js
```js
const countries = [['Finland', 'Helsinki'], ['Sweden', 'Stockholm'], ['Norway', 'Oslo']]
const countries = [['Finland', 'Helsinki'], ['Sweden', 'Stockholm'], ['Norway', 'Oslo']]
@ -182,9 +182,9 @@ HTML CSS JS
Node Express MongoDB
Node Express MongoDB
```
```
### Destructuring Object
### Object Destructuring
When we destructure the name of the variable we use to destructure should be exactly the same as the key or property of the object. See the example below.
Quando si destruttura, il nome della variabile che si usa per destrutturare deve essere esattamente lo stesso della chiave o della proprietà dell'oggetto. Si veda l'esempio seguente.
If the key is not found in the object the variable will be assigned to undefined. Sometimes the key might not be in the object, in that case we can give a default value during declaration. See the example.
Se la chiave non viene trovata nell'oggetto, la variabile verrà assegnata a undefined. A volte la chiave potrebbe non essere presente nell'oggetto, in questo caso possiamo dare un valore predefinito durante la dichiarazione. Si veda l'esempio.
Destructuring keys as a function parameters. Let us create a function which takes a rectangle object and it returns a perimeter of a rectangle.
Destrutturazione delle chiavi come parametri di una funzione. Creiamo una funzione che prende un oggetto rettangolo e restituisce il perimetro di un rettangolo.
### Object parameter without destructuring
### Object parameter senza destructuring
```js
```js
// Without destructuring
// Without destructuring
@ -302,7 +302,7 @@ const getPersonInfo = obj => {
console.log(getPersonInfo(person))
console.log(getPersonInfo(person))
```
```
### Object parameter with destructuring
### Object parameter con destructuring
```js
```js
@ -339,7 +339,7 @@ Asabeneh Yetayeh lives in Finland. He is 250 years old. He is an Instructor and
*/
*/
```
```
### Destructuring object during iteration
### Object Destructuring durante l'iterazione
```js
```js
const todoList = [
const todoList = [
@ -371,11 +371,11 @@ Give JS Test 4/1/2020 10:00 false
Assess Test Result 4/1/2020 1:00 false
Assess Test Result 4/1/2020 1:00 false
```
```
### Spread or Rest Operator
### Spread o Rest Operator
When we destructure an array we use the spread operator(...) to get the rest elements as array. In addition to that we use spread operator to spread array elements to another array.
Quando destrutturiamo un array, utilizziamo l'operatore spread(...) per ottenere gli elementi rimanenti come array. Inoltre, utilizziamo l'operatore spread per distribuire gli elementi dell'array in un altro array.
### Spread operator to get the rest of array elements
### Operatore Spread per ottenere il resto degli elementi di un array
Whenever we like to write an arrow function which takes unlimited number of arguments we use a spread operator. If we use a spread operator as a parameter, the argument passed when we invoke a function will change to an array.
Ogni volta che vogliamo scrivere una funzione che accetta un numero illimitato di argomenti, utilizziamo l'operatore spread. Se utilizziamo un operatore di diffusione come parametro, l'argomento passato quando invochiamo una funzione si trasformerà in un array.
🌕 You achieved quite a lot so far. Now, your Livello of JavaScript is upper intermediate. Keep going! You have just completed day 11 challenges and you are 11 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
🌕 Finora hai ottenuto molti risultati. Ora il tuo livello di JavaScript è intermedio. Continua così! Sei appena completato le sfide dell'undicesimo giorno e sei a 11 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## Esercizi
## Esercizi
@ -588,19 +588,20 @@ const users = [
]
]
```
```
1. Destructure and assign the elements of constants array to e, pi, gravity, humanBodyTemp, waterBoilingTemp.
1. Destrutturare e assegnare gli elementi dell'array di costanti a e, pi greco, gravità, humanBodyTemp, waterBoilingTemp.
2. Destructure and assign the elements of countries array to fin, est, sw, den, nor
2. Destrutturare e assegnare gli elementi dell'array countries a fin, est, sw, den, nor.
3. Destructure the rectangle object by its properties or keys.
3. Destrutturare l'oggetto rettangolo in base alle sue proprietà o chiavi.
### Esercizi: Livello 2
### Esercizi: Livello 2
1. Iterate through the users array and get all the keys of the object using destructuring
1. Iterare l'array degli utenti e ottenere tutte le chiavi dell'oggetto utilizzando la destrutturazione.
2. Find the persons who have less than two skills
2. Trovare le persone che hanno meno di due competenze
### Esercizi: Livello 3
### Esercizi: Livello 3
1. Destructure the countries object print name, capital, population and languages of all countries
1. Destrutturare l'oggetto Paesi stampare nome, capitale, popolazione e lingua di tutti i Paesi.
2. A junior developer structure student name, skills and score in array of arrays which may not easy to read. Destructure the following array name to name, skills array to skills, scores array to scores, JavaScript score to jsScore and React score to reactScore variable in one line.
2. Uno sviluppatore junior struttura il nome dello studente, le competenze e il punteggio in array di array che potrebbero non essere facili da leggere. Destrutturare il seguente array nome in nome, l'array delle competenze in competenze, l'array dei punteggi in punteggi, il punteggio JavaScript in jsScore e il punteggio React in reactScore in una riga.
- [Escape character(\\) in RegExp](#escape-character-in-regexp)
- [Escape character(\\) in RegExp](#escape-character-in-regexp)
- [One or more times(+)](#one-or-more-times)
- [Uno o più volte(+)](#one-or-more-times)
- [Period(.)](#period)
- [Period(.)](#period)
- [Zero or more times(*)](#zero-or-more-times)
- [Zero o più volte(*)](#zero-or-more-times)
- [Zero or one times(?)](#zero-or-one-times)
- [Zero oppure una volta(?)](#zero-or-one-times)
- [Quantifier in RegExp](#quantifier-in-regexp)
- [Quantifier in RegExp](#quantifier-in-regexp)
- [Cart ^](#cart-)
- [Cart ^](#cart-)
- [Exact match](#exact-match)
- [Match esatto](#exact-match)
- [💻 Esercizi](#-exercises)
- [💻 Esercizi](#-exercises)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 1](#exercises-level-1)
- [Esercizi: Livello 2](#exercises-level-2)
- [Esercizi: Livello 2](#exercises-level-2)
@ -44,31 +44,31 @@
# 📘 Day 12
# 📘 Day 12
## Regular Expressions
## Espressioni Regolari
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.
Un'espressione regolare o RegExp è un piccolo linguaggio di programmazione che aiuta a trovare modelli nei dati. Una RegExp può essere usata per verificare se un certo modello esiste in diversi tipi di dati. Per usare le RegExp in JavaScript si può usare il costruttore RegExp oppure si può dichiarare un modello RegExp usando due barre in avanti seguite da un flag. Possiamo creare un modello in due modi.
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.
Per dichiarare una stringa si usano una virgoletta singola, una doppia virgoletta e un backtick, mentre per dichiarare un'espressione regolare si usano due barre in avanti e un flag opzionale. Il flag può essere g, i, m, s, u o y.
### RegExp parameters
### Parameteri RegExp
A regular expression takes two parameters. One required search pattern and an optional flag.
Un'espressione regolare richiede due parametri. Un modello di ricerca richiesto e un parametron optional flag.
#### Pattern
#### 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.
Un modello può essere un testo o una qualsiasi forma di modello che presenta una qualche somiglianza. Per esempio, la parola spam in un'e-mail potrebbe essere un modello che ci interessa cercare in un'e-mail o un numero di telefono in formato numero potrebbe essere il nostro interesse da cercare.
#### Flags
#### Flags
Flags are optional parameters in a regular expression which determine the type of searching. Let us see some of the flags:
I flag sono parametri opzionali di un'espressione regolare che determinano il tipo di ricerca. Vediamo alcuni dei flag:
- g: a global flag which means looking for a pattern in whole text
- g: un flag globale che significa cercare un modello in tutto il testo
- i: case insensitive flag(it searches for both lowercase and uppercase)
- i: flag di insensibilità alle maiuscole (cerca sia le minuscole che le maiuscole)
- m: multiline
- m: multilinea
### Creating a pattern with RegExp Constructor
### Creare un pattern con il costruttore RegExp
Declaring regular expression without global flag and case insensitive flag.
Dichiarare un'espressione regolare senza flag globale e senza flag case insensitive.
```js
```js
// without flag
// without flag
@ -76,7 +76,7 @@ let pattern = 'love'
let regEx = new RegExp(pattern)
let regEx = new RegExp(pattern)
```
```
Declaring regular expression with global flag and case insensitive flag.
Dichiarazione di un'espressione regolare con flag globale e flag case insensitive.
```js
```js
let pattern = 'love'
let pattern = 'love'
@ -84,33 +84,33 @@ let flag = 'gi'
let regEx = new RegExp(pattern, flag)
let regEx = new RegExp(pattern, flag)
```
```
Declaring a regex pattern using RegExp object. Writing the pattern and the flag inside the RegExp constructor
Dichiarare un modello regex usando l'oggetto RegExp. Scrittura del pattern e del flag all'interno del costruttore RegExp
```js
```js
let regEx = new RegExp('love','gi')
let regEx = new RegExp('love','gi')
```
```
### Creating a pattern without RegExp Constructor
### Creare un pattern senza il costruttore RegExp
Declaring regular expression with global flag and case insensitive flag.
Dichiarazione di un'espressione regolare con flag globale e flag case insensitive.
```js
```js
let regEx= /love/gi
let regEx= /love/gi
```
```
The above regular expression is the same as the one which we created with RegExp constructor
L'espressione regolare di cui sopra è uguale a quella creata con il costruttore RegExp
```js
```js
let regEx= new RegExp('love','gi')
let regEx= new RegExp('love','gi')
```
```
### RegExpp Object Methods
### Metodi dell'oggetto RegExp
Let us see some of RegExp methods
Vediamo alcuni metodi di RegExp
#### Testing for a match
#### Testing per un match
*test()*:Tests for a match in a string. It returns true or false.
*test()*: Verifica la presenza di una corrispondenza in una stringa. Restituisce vero o falso.
```js
```js
const str = 'I love JavaScript'
const str = 'I love JavaScript'
@ -123,10 +123,10 @@ console.log(result)
true
true
```
```
#### Array containing all of the match
#### Array contenente tutto il match
*match()*:Returns an array containing all of the matches, including capturing groups, or null if no match is found.
*match()*: Restituisce un array contenente tutte le corrispondenze, compresi i gruppi di cattura, oppure null se non viene trovata alcuna corrispondenza.
If we do not use a global flag, match() returns an array containing the pattern, index, input and group.
Se non si utilizza un flag globale, match() restituisce un array contenente il pattern, l'indice, l'input e il gruppo.
```js
```js
const str = 'I love JavaScript'
const str = 'I love JavaScript'
@ -150,7 +150,7 @@ console.log(result)
["love"]
["love"]
```
```
*search()*: Tests for a match in a string. It returns the index of the match, or -1 if the search fails.
*search()*: Cerca una corrispondenza in una stringa. Restituisce l'indice della corrispondenza o -1 se la ricerca fallisce.
```js
```js
const str = 'I love JavaScript'
const str = 'I love JavaScript'
@ -163,9 +163,9 @@ console.log(result)
2
2
```
```
#### Replacing a substring
#### Sostituire una substring
*replace()*: Executes a search for a match in a string, and replaces the matched substring with a replacement substring.
*replace()*: Esegue la ricerca di una corrispondenza in una stringa e sostituisce la sottostringa corrispondente con una sostitutiva.
```js
```js
const txt = 'Python is the most beautiful language that a human begin has ever created.\
const txt = 'Python is the most beautiful language that a human begin has ever created.\
@ -219,43 +219,43 @@ console.log(matches)
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.
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
* []: Un insieme di caratteri
* [a-c] means, a or b or c
* [a-c] significa, a o b o c
* [a-z] means, any letter a to z
* [a-z] significa, qualsiasi lettera da a a z
* [A-Z] means, any character A to Z
* [A-Z] significa qualsiasi carattere dalla A alla Z
* [0-3] means, 0 or 1 or 2 or 3
* [0-3] significa, 0 o 1 o 2 o 3
* [0-9] means any number 0 to 9
* [0-9] significa qualsiasi numero da 0 a 9
* [A-Za-z0-9] any character which is a to z, A to Z, 0 to 9
* [A-Za-z0-9] qualsiasi carattere dalla a alla z, dalla A alla Z, da 0 a 9
* \\: uses to escape special characters
* \\: utilizza per sfuggire a caratteri speciali
* \d mean: match where the string contains digits (numbers from 0-9)
* \d significa: corrisponde se la stringa contiene cifre (numeri da 0-9)
* \D mean: match where the string does not contain digits
* \D significa: corrispondere a una stringa che non contiene cifre
* . : any character except new line character(\n)
* . : qualsiasi carattere tranne il carattere di nuova riga (\n)
* ^: starts with
* ^: inizia con
* r'^substring' eg r'^love', a sentence which starts with a word love
* r'^substring' eg r'^love', una frase che inizia con la parola amore
* r'[^abc] mean not a, not b, not c.
* r'[^abc] significa non a, non b, non c.
* $: ends with
* $: finisce con
* r'substring$' eg r'love$', sentence ends with a word love
* r'substring$' eg r'love$', la frase termina con una parola amore
* *: zero or more times
* *: zero o più volte
* r'[a]*' means a optional or it can occur many times.
* r'[a]*' significa un optional o può verificarsi più volte.
* +: one or more times
* +: una o più volte
* r'[a]+' means at least once or more times
* r'[a]+' significa almeno una o più volte
* ?: zero or one times
* ?: zero o più volte
* r'[a]?' means zero times or once
* r'[a]?' significa zero o una volta
* \b: word bounder, matches with the beginning or ending of a word
* \b: delimitatore di parole, corrisponde all'inizio o alla fine di una parola
* {3}: Exactly 3 characters
* {3}: Esattamente 3 caratteri
* {3,}: At least 3 characters
* {3,}: Almeno 3 caratteri
* {3,8}: 3 to 8 characters
* {3,8}: Da 3 a 8 caratteri
* |: Either or
* |: operatore or
* r'apple|banana' mean either of an apple or a banana
* r'apple|banana' significa sia di una mela che di una banana
We can specify the length of the substring we look for in a text, using a curly bracket. Let us see, how ot use RegExp quantifiers. Imagine, we are interested in substring that their length are 4 characters
Possiamo specificare la lunghezza della sottostringa che cerchiamo in un testo, utilizzando una parentesi graffa. Vediamo come utilizzare i quantificatori RegExp. Immaginiamo di essere interessati a una sottostringa la cui lunghezza sia di 4 caratteri
```js
```js
const txt = 'This regular expression example was made in December 6, 2019.'
const txt = 'This regular expression example was made in December 6, 2019.'
@ -435,14 +435,14 @@ let result = pattern.test(name)
console.log(result) // true
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.
🌕 Stai andando lontano. Continuate così! Ora sei super caricato con il potere delle espressioni regolari. Hai il potere di estrarre e pulire qualsiasi tipo di testo e puoi ricavare un significato dai dati non strutturati. Hai appena completato le sfide del 12° giorno e sei a 12 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## 💻 Esercizi
## 💻 Esercizi
### Esercizi: Livello 1
### Esercizi: Livello 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. Calcolate il reddito totale annuo della persona che si trova nel testo seguente. 'Guadagna 4000 euro di stipendio al mese, 10000 euro di bonus annuale, 5500 euro di corsi online al mese.'
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.
1. La posizione di alcune particelle sull'asse orizzontale x -12, -4, -3 e -1 in direzione negativa, 0 nell'origine, 4 e 8 in direzione positiva. Estraete questi numeri e trovate la distanza tra le due particelle più lontane.
1. Write a pattern which identify if a string is a valid JavaScript variable
1. Scrivere un modello che identifichi se una stringa è una variabile JavaScript valida.
```sh
```sh
is_valid_variable('first_name') # True
is_valid_variable('first_name') # True
@ -461,7 +461,7 @@ distance = 12
### Esercizi: Livello 2
### Esercizi: Livello 2
1. Write a function called *tenMostFrequentWords* which get the ten most frequent word from a string?
1. Scrivere una funzione chiamata *tenMostFrequentWords* che ottenga le dieci parole più frequenti da una stringa?
```js
```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.`
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.`
@ -514,7 +514,7 @@ distance = 12
### Esercizi: Livello 3
### Esercizi: Livello 3
1. Writ a function which cleans text. Clean the following text. After cleaning, count three most frequent words in the string.
1. Scrivere una funzione che pulisca il testo. Pulire il testo seguente. Dopo la pulizia, contare le tre parole più frequenti nella stringa.
```js
```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!?`
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!?`
@ -524,7 +524,7 @@ distance = 12
```sh
```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
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
```
```
2. Write a function which find the most frequent words. After cleaning, count three most frequent words in the string.
2. Scrivere una funzione che trovi le parole più frequenti. Dopo la pulizia, contare le tre parole più frequenti nella stringa.
In this section, we will cover about console and console object methods. Absolute beginners usually do not know which to use: console.log(), document.write() or document.getElementById.
In questa sezione tratteremo i metodi della console e dell'oggetto console. I principianti assoluti di solito non sanno quale usare: console.log(), document.write() o document.getElementById.
We use console object methods to show output on the browser console and we use document.write to show output on the browser document(view port). Both methods used only for testing and debugging purposes. The console method is the most popular testing and debugging tool on the browser. We use document.getElementById() when we like to interact with DOM try using JavaScript. We will cover DOM in another section.
Utilizziamo i metodi degli oggetti console per mostrare l'output sulla console del browser e document.write per mostrare l'output sul documento del browser (porta di visualizzazione). Entrambi i metodi sono utilizzati solo per scopi di test e debug. Il metodo console è lo strumento di test e debug più diffuso nel browser. Utilizziamo document.getElementById() quando vogliamo interagire con il DOM utilizzando JavaScript. Tratteremo il DOM in un'altra sezione.
In addition to the famous, console.log() method, the console provides other more methods.
Oltre al famoso metodo console.log(), la console fornisce altri metodi.
### console.log()
### console.log()
We use console.log() to show output on the browser console. We can substitute values and also we can style the logging out put using %c.
Usiamo console.log() per mostrare l'output sulla console del browser. Possiamo sostituire i valori e anche stilizzare il log con %c.
- Showing output on browser console
- Mostrare l'output sulla console del browser
```js
```js
console.log('30 Days of JavaScript')
console.log('30 Days of JavaScript')
@ -71,7 +71,7 @@ console.log('%d %s of JavaScript', 30, 'Days')
- CSS
- CSS
We can style logging message using css. Copy the following code and paste it on browser console to see the result.
Possiamo stilizzare il messaggio di registrazione usando i css. Copiare il codice seguente e incollarlo nella console del browser per vedere il risultato.
```js
```js
console.log('%c30 Days Of JavaScript', 'color:green') // log output is green
console.log('%c30 Days Of JavaScript', 'color:green') // log output is green
@ -87,7 +87,7 @@ console.log(
### console.warn()
### console.warn()
We use console.warn() to give warning on browser. For instance to inform or warn deprecation of version of a package or bad practices. Copy the following code and paste it on browser console to see warning messages.
Utilizziamo console.warn() per fornire avvisi al browser. Per esempio, per informare o avvisare della deprecazione di una versione di un pacchetto o di cattive pratiche. Copiate il codice seguente e incollatelo nella console del browser per visualizzare i messaggi di avviso.
```js
```js
console.warn('This is a warning')
console.warn('This is a warning')
@ -99,7 +99,7 @@ console.warn('Warning is different from error')
### console.error()
### console.error()
The console.error() method shows an error messages.
Il metodo console.error() mostra un messaggio di errore.
```js
```js
console.error('This is an error message')
console.error('This is an error message')
@ -108,16 +108,16 @@ console.error('We all make mistakes')
### console.table()
### console.table()
The console.table() method display data as a table on the console. Displays tabular data as a table. The console.table() takes one required argument data, which must be an array or an object, and one additional optional parameter columns.
Il metodo console.table() visualizza i dati come tabella sulla console. Visualizza i dati in forma di tabella. Il metodo console.table() accetta un parametro obbligatorio, data, che deve essere un array o un oggetto, e un parametro opzionale aggiuntivo columns.
Let us first start with a simple array. The code below displays a table with two columns. An index column to display the index and value column to display the names
Cominciamo con un semplice array. Il codice seguente visualizza una tabella con due colonne. Una colonna indice per visualizzare l'indice e una colonna valore per visualizzare i nomi.
Let us also check the result of an object. This creates table with two columns:an index column containing the keys and a value column contain the values of the object.
Controlliamo anche il risultato di un oggetto. Si crea una tabella con due colonne: una colonna indice contenente le chiavi e una colonna valore contenente i valori dell'oggetto.
```js
```js
const user = {
const user = {
@ -130,7 +130,7 @@ const user = {
console.table(user)
console.table(user)
```
```
Check the rest of the examples by copying and paste on the browser console.
Verificate il resto degli esempi copiando e incollando sulla console del browser.
```js
```js
const countries = [
const countries = [
@ -177,7 +177,7 @@ console.table(users)
### console.time()
### console.time()
Starts a timer you can use to track how long an operation takes. You give each timer a unique name, and may have up to 10,000 timers running on a given page. When you call console.timeEnd() with the same name, the browser will output the time, in milliseconds, that elapsed since the timer was started.
Avvia un timer che può essere utilizzato per tenere traccia del tempo necessario per un'operazione. A ogni timer viene assegnato un nome univoco e si possono avere fino a 10.000 timer in esecuzione su una data pagina. Quando si chiama console.timeEnd() con lo stesso nome, il browser visualizza il tempo, in millisecondi, trascorso dall'avvio del timer.
```js
```js
const countries = [
const countries = [
@ -220,11 +220,11 @@ Norway Oslo
forEach loop: 0.358154296875ms
forEach loop: 0.358154296875ms
```
```
According the above output the regular for loop is slower than for of or forEach loop.
Secondo l'output sopra riportato, il ciclo for regolare è più lento del ciclo for of o forEach.
### console.info()
### console.info()
It displays information message on browser console.
Visualizza un messaggio informativo sulla console del browser.
```js
```js
console.info('30 Days Of JavaScript challenge is trending on Github')
console.info('30 Days Of JavaScript challenge is trending on Github')
@ -234,7 +234,7 @@ console.info('30 Days Of HTML and CSS challenge might be released')
### console.assert()
### console.assert()
The console.assert() methods writes an error message to the console if the assertion is false. If the assertion is true, nothing happens. The first parameter is an assertion expression. If this expression is false, an Assertion failed error message will be displayed.
Il metodo console.assert() scrive un messaggio di errore nella console se l'asserzione è falsa. Se l'asserzione è vera, non succede nulla. Il primo parametro è un'espressione di asserzione. Se questa espressione è falsa, viene visualizzato un messaggio di errore Asserzione fallita.
```js
```js
console.assert(4 > 3, '4 is greater than 3') // no result
console.assert(4 > 3, '4 is greater than 3') // no result
@ -249,7 +249,7 @@ for (let i = 0; i <= 10; i += 1) {
### console.group()
### console.group()
The console.group() can help to group different log groups. Copy the following code and paste it on browser console to the groups.
Console.group() può aiutare a raggruppare diversi gruppi di log. Copiare il codice seguente e incollarlo nella console del browser per i gruppi.
It prints the number of times the console.count() is called. It takes a string label parameter. It is very helpful to count the number of times a function is called. In the following example, the console.count() method will run three times
Stampa il numero di volte in cui viene richiamato console.count(). Richiede un parametro stringa label. È molto utile per contare il numero di volte che una funzione viene chiamata. Nell'esempio seguente, il metodo console.count() verrà eseguito tre volte
```js
```js
const func = () => {
const func = () => {
@ -331,27 +331,27 @@ Function has been called: 3
### console.clear()
### console.clear()
The console.clear() cleans the browser console.
Console.clear() pulisce la console del browser.
🌕 Keep up the good work. Keep pushing, the sky is the limit! You have just completed day 13 challenges and you are 13 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
🌕 Continua a lavorare bene. Continua a spingere, il cielo è il limite! Hai appena completato le sfide del 13° giorno e sei a 13 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.
## Esercizi
## Esercizi
### Esercizi:Level 1
### Esercizi:Level 1
1. Display the countries array as a table
1. Visualizzare l'array di paesi come tabella
2. Display the countries object as a table
2. Visualizzare l'oggetto Paesi come tabella
3. Use console.group() to group logs
3. Usare console.group() per raggruppare i log.
### Esercizi:Level 2
### Esercizi:Livello 2
1. 10 > 2 \* 10 use console.assert()
1. 10 > 2 \* 10 usare console.assert()
2. Write a warning message using console.warn()
2. Scrivere un messaggio di avviso usando console.warn()
3. Write an error message using console.error()
3. Scrivere un messaggio di errore usando console.error()
### Esercizi:Level 3
### Esercizi:Level 3
1. Check the speed difference among the following loops: while, for, for of, forEach
1. Verificare la differenza di velocità tra i seguenti cicli: while, for, for of, forEach
![Thirty Days Of JavaScript](../../images/banners/day_1_14.png)
![Thirty Days Of JavaScript](../../images/banners/day_1_14.png)
- [Day 14](#day-14)
- [Day 14](#day-14)
- [Error Handling](#error-handling)
- [Gestione Errori](#error-handling)
- [Error Types](#error-types)
- [Tipi di Errore](#error-types)
- [Esercizi](#exercises)
- [Esercizi](#exercises)
- [Esercizi:Level 1](#exerciseslevel-1)
- [Esercizi:Level 1](#exerciseslevel-1)
- [Esercizi: Livello 2](#exercises-level-2)
- [Esercizi: Livello 2](#exercises-level-2)
@ -28,11 +28,11 @@
# Day 14
# Day 14
## Error Handling
## Gestione Errori
JavaScript is a loosely-typed language. Some times you will get a runtime error when you try to access an undefined variable or call undefined function etc.
JavaScript è un linguaggio a tipizzazione libera. A volte si ottiene un errore di runtime quando si tenta di accedere a una variabile non definita o di chiamare una funzione non definita, ecc.
JavaScript similar to python or Java provides an error-handling mechanism to catch runtime errors using try-catch-finally block.
JavaScript, simile a Python o Java, fornisce un meccanismo di gestione degli errori per catturare gli errori di runtime utilizzando il blocco try-catch-finally.
```js
```js
try {
try {
@ -44,11 +44,11 @@ try {
}
}
```
```
**try**: wrap suspicious code that may throw an error in try block.The try statement allows us to define a block of code to be tested for errors while it is being executed.
L'istruzione *try* ci permette di definire un blocco di codice che deve essere testato per verificare la presenza di errori durante l'esecuzione.
**catch**: write code to do something in catch block when an error occurs. The catch block can have parameters that will give you error information. Catch block is used to log an error or display specific messages to the user.
**catch**: scrivere il codice per fare qualcosa nel blocco catch quando si verifica un errore. Il blocco catch può avere dei parametri che forniscono informazioni sull'errore. Il blocco catch viene utilizzato per registrare un errore o per visualizzare messaggi specifici all'utente.
**finally**: finally block will always be executed regardless of the occurrence of an error. The finally block can be used to complete the remaining task or reset variables that might have changed before error occurred in try block.
**finally**: il blocco finally viene sempre eseguito, indipendentemente dal verificarsi di un errore. Il blocco finally può essere usato per completare il compito rimanente o per resettare le variabili che potrebbero essere cambiate prima del verificarsi dell'errore nel blocco try.
**Esempio:**
**Esempio:**
@ -83,7 +83,7 @@ ReferenceError: fistName is not defined
In any case it will be executed
In any case it will be executed
```
```
The catch block take a parameter. It is common to pass e, err or error as a parameter to the catch block. This parameter is an object and it has name and message keys. Lets use the name and message.
Il blocco catch accetta un parametro. È comune passare e, err o error come parametro al blocco catch. Questo parametro è un oggetto e ha le chiavi name e message. Utilizziamo il nome e il messaggio.
```js
```js
try {
try {
@ -103,7 +103,7 @@ Error message fistName is not defined
In any case I will be executed
In any case I will be executed
```
```
throw: the throw statement allows us to create a custom error. We can through a string, number, boolean or an object. Use the throw statement to throw an exception. When you throw an exception, expression specifies the value of the exception. Each of the following throws an exception:
throw: l'istruzione throw consente di creare un errore personalizzato. Possiamo utilizzare una stringa, un numero, un booleano o un oggetto. Utilizzare l'istruzione throw per lanciare un'eccezione. Quando si lancia un'eccezione, l'espressione specifica il valore dell'eccezione. Ognuno dei seguenti comandi lancia un'eccezione:
```js
```js
throw 'Error2' // generates an exception with a string value
throw 'Error2' // generates an exception with a string value
- ReferenceError: An illegal reference has occurred. A ReferenceError is thrown if we use a variable that has not been declared.
- ReferenceError: Si è verificato un riferimento illegale. Un ReferenceError viene lanciato se si utilizza una variabile che non è stata dichiarata.
```js
```js
let firstName = 'Asabeneh'
let firstName = 'Asabeneh'
@ -145,7 +145,7 @@ Uncaught ReferenceError: lastName is not defined
at <anonymous>:2:35
at <anonymous>:2:35
```
```
- SyntaxError: A syntax error has occurred
- SyntaxError: Si è verificato un errore di sintassi
```js
```js
let square = 2 x 2
let square = 2 x 2
@ -158,7 +158,7 @@ console.log('Hello, world")
Uncaught SyntaxError: Unexpected identifier
Uncaught SyntaxError: Unexpected identifier
```
```
- TypeError: A type error has occurred
- TypeError: Si è verificato un errore di tipo
```js
```js
let num = 10
let num = 10
@ -170,23 +170,23 @@ Uncaught TypeError: num.toLowerCase is not a function
at <anonymous>:2:17
at <anonymous>:2:17
```
```
These are some of the common error you may face when you write a code. Understanding errors can help you to know what mistakes you made and it will help you to debug your code fast.
Questi sono alcuni degli errori più comuni che si possono incontrare quando si scrive un codice. Capire gli errori può aiutarvi a capire quali sono gli errori commessi e vi aiuterà a eseguire il debug del codice in modo rapido.
🌕 You are flawless. Now, you knew how to handle errors and you can write robust application which handle unexpected user inputs. You have just completed day 14 challenges and you are 14 steps a head in to your way to greatness. Now do some exercises for your brain and for your muscle.
🌕 Sei impeccabile. Ora sai come gestire gli errori e sei in grado di scrivere applicazioni robuste che gestiscono gli input inaspettati dell'utente. Hai appena completato le sfide del giorno 14 e sei a 14 passi dalla tua strada verso la grandezza. Ora fai qualche esercizio per il cervello e per i muscoli.