to do list in JavaScript

to do list in JavaScript

In questa lezione realizzeremo una semplice to do list in JavaScript. Si tratta di un esercizio classico che ci permetterà di mettere in pratica i concetti appresi finora e di sperimentare l’utilizzo di JavaScript per manipolare il DOM e gestire eventi.

Per realizzare questo progetto infatti utilizzeremo alcuni metodi per manipolare il DOM in JavaScript.

Intanto provate il progetto che andremo a realizzare assieme inserendo una voce e cliccando poi sul pulsante add della figura sotto:

Lista delle Attività

    To do list in JavaScript – sviluppo del codice

    Innanzitutto realizziamo il codice HTML del progetto.

    Creiamo dunque una casella di input con un button e predisponiamo una lista dove appariranno tutti gli elementi che aggiungeremo a mano a mano.

    <div id="flexContainer">
        <h1>Lista delle Attività</h1>
        <div id="inputContainer">
           <input type="text" id="taskInput" placeholder="Aggiungi una nuova attività">
           <button class="addBtn" id="addButton">Aggiungi</button>
        </div>
        <ul id="taskList"></ul>
    </div>

    Realizziamo poi del CSS a piacere per dare un tocco grafico, io ad esempio ho realizzato questo:

    body {
          font-family: Arial, sans-serif;
    
          background-color: #f4f4f4;
          display: flex;
          justify-content: center;
          align-items: center;
     }
    
    #flexContainer {
          display: flex;
          flex-direction: column;
          align-items: center;
          width: 600px;
          padding: 20px;
          margin: 80px;
          border-radius: 8px;
          background-color: #fff;
          box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }
    
    h1 {
        color: #333;
        margin-bottom: 20px;
     }
    
    #inputContainer {
         display: flex;
         margin-bottom: 20px;
     }
    
    input[type="text"] {
         flex: 1;
         padding: 8px;
         font-size: 1em;
         margin-right: 10px;
    }
    
    button {
         padding: 10px 20px;
         font-size: 1em;
         cursor: pointer;
         border: none;
         border-radius: 4px;
         transition: background-color 0.3s;
     }
    
    button.addBtn {
         background-color: #4CAF50;
         color: #fff;
     }
    
    button.editBtn {
          background-color: #3498db;
                color: #fff;
    }
    
    button.deleteBtn {
        background-color: #e74c3c;
        color: #fff;
    }
    
    button:hover {
         background-color: #45a049;
     }
    
    ul {
        list-style-type: none;
        padding: 0;
     }
    
     li {
        font-size: 1.2em;
        margin-bottom: 10px;
        display: flex;
        align-items: center;
        width: 100%;
     }
            
    .taskText {
         flex: 1;
      }
    
    .buttonContainer {
          display: flex;
          margin-left: auto;
      }
    
     .buttonContainer button {
          margin-left: 10px;
    }
    
    /* Finestra modale */
    #modal {
          display: none;
          position: fixed;
          top: 0;
          left: 0;
          width: 100%;
          height: 100%;
          background-color: rgba(0, 0, 0, 0.5);
          justify-content: center;
          align-items: center;
     }
    
    #modalContent {
          background-color: #fff;
          padding: 20px;
          border-radius: 8px;
          box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    }
    
    #modalInput {
          margin-bottom: 10px;
    }
    
     #modalButtons {
          display: flex;
          justify-content: flex-end;
    }
    
    #modalButtons button {
          margin-left: 10px;
    }

    Corso su JavaScript

    Infine sviluppiamo il codice JavaScript necessario a far funzionare la nostra to do list:

    const addButton = document.getElementById('addButton');
    addButton.addEventListener('click', function () {
        let taskInput = document.getElementById('taskInput').value;
        const taskList = document.getElementById('taskList');
    
        if (taskInput.trim() !== '') {
             const newTask = document.createElement('li');
    
             newTask.innerHTML = `
              <span class="taskText">${taskInput}</span>
              <div class="buttonContainer">
                  <button class="editBtn" onclick="openModal(this)">Modifica</button>
                  <button class="deleteBtn" onclick="deleteTask(this)">Elimina</button>
               </div>  `;
    
               taskList.appendChild(newTask);
               taskInput = '';
                }
        });
    
        const modal = document.getElementById('modal');
        const modalInput = document.getElementById('modalInput');
        let editingTask = null;
    
        function deleteTask(button) {
            const taskItem = button.parentNode.parentNode;
            const confirmation = window.confirm("Sei sicuro di voler eliminare questa attività?");
        
        if (confirmation) {
            taskItem.parentNode.removeChild(taskItem);
        };
    
     }
            
    function openModal(button) {
        const taskItem = button.parentNode.parentNode;
        const taskText = taskItem.querySelector('.taskText');
        modalInput.value = taskText.textContent;
        editingTask = taskItem;  // Memorizza l'attività che sta per essere modificata
        modal.style.display = 'flex';
     }
    
    document.getElementById('confirmEdit').addEventListener('click', confirmEdit);
    function confirmEdit() {
        const taskText = modalInput.value.trim();
    
        if (taskText !== '') {
           const span = editingTask.querySelector('.taskText');
           span.textContent = taskText;
    
           closeModal();
         }
     }
    
    document.getElementById('closeModal').addEventListener('click', closeModal);
        function closeModal(confirmEdit) {
            modal.style.display = 'none';
            editingTask = null;  // Resetta l'attività in modifica
    }

    Descrizione dell’algoritmo per la to do list in JavaScript

    In questo esempio ho creato alcune funzioni per la gestione della to-do list in JavaScript.

    Innanzitutto ho creato la funzione aggiungi attività, e attraverso un listener l’ho collegata al button addButton. Dunque quando si clicca sul pulsante si avvia la funzione che consente di recuperare il valore dalla casella di input. Prima di inserirlo nella lista di cose da fare controlliamo che il campo di input non sia vuoto e se questa condizione è vera aggiunge l’attività attravesro al creazione di un nuovo elemento li. Per ogni attività ho creato anche due pulsanti per l’aggiunta e l’eliminazione della voce dell’elenco.

    Dopo ho creato la funzione per eliminare l’attività che viene chiamata al click sul button “Elimina” all’interno dell’attività. In questa funzione ottengo il riferimento all’elemento <li> padre dell’attività e prima dell’eliminazione chiedo conferma attraverso una finestra di alert. Se l’utente conferma, rimuove l’elemento <li> dall’elenco.

    Quindi ho sviluppato la funzione per la modifica dell’attività definendo una finestra openModal che viene chiamata quando viene cliccato il bottone “Modifica” all’interno di un’attività. Questa funzione Ottiene il riferimento all’elemento <li> padre dell’attività e al testo dell’attività. Dunque mostra una modal (una finestra modale) con un campo di input prepopolato con il testo dell’attività. Inoltre memorizza l’attività che sta per essere modifica.

    Quando scriviamo nella casella di input le modifiche possiamo confermarle attraverso il pulsante “Modifica”. A questo pulsante ho infatti aggiunto un listener per gestire il click dell’utente. Quando viene cliccato il bottone di conferma, recupera il testo dall’input della modal. Se il testo non è vuoto, aggiorna il testo dell’attività nell’elemento <li> corrispondente e chiude la modal.

    Altrimenti possiamo chiudere la finestra modale senza apportare nessuna modifica, cliccando sul pulsante Annulla. Quando si clicca su questo pulsante di chiusura, si chiude la modale nascondendola. Inoltre si resetta la variabile editingTask a null.

    Conclusione

    In questa lezione abbiamo sviluppato una semplice to do list in JavaScript, provate anche voi a svilupparne una e scrivete nei commenti sotto. Nelle prossime lezioni svilupperemo tanti altri progetti creativi.

    Alcuni link utili

    Indice tutorial JavaScript

    Il linguaggio JavaScript

    Come utilizzare JavaScript alert

    Variabili in JavaScript

    Gioco indovina numero in JavaScript

    Gioco della morra cinese in JavaScript

    Semplice quiz utilizzando gli array

    Come realizzare il gioco dei dadi online

    toLowerCase in JavaScript

    toLowerCase in JavaScript

    Il metodo toLowerCase in JavaScript è utilizzato per convertire tutti i caratteri di una stringa in lettere minuscole. Questo metodo è una funzione integrata in JavaScript che appartiene all’oggetto String.

    toLowerCase ha la seguente sintassi:

    stringa.toLowerCase();

    Dove stringa rappresenta la stringa da convertire in minuscolo.

    Anche in questo caso, così come con il metodo toUpperCase, visto nella lezione precedente, la stringa originale non viene cambiata. Quindi per vedere il risultato dobbiamo utilizzare una variabile dove salvare la stringa convertita, può essere anche la variabile stessa.

    Corso su JavaScript

    In questo primo esempio trasformiamo la stringa in minuscolo.

    let testoMaiuscolo = "JAVASCRIPT";
    let testoMinuscolo = testoMaiuscolo.toLowerCase();
    
    console.log(testoMinuscolo);  // "javascript"
    

    JavaScript toLowerCase secondo esempio

    Trasformiamo una stringa presa in input con caratteri minuscoli.

    Ecco dunque l’esempio proposto che utilizza il metodo toLowerCase di JavaScript:

    let stringa='CODing';
    if (stringa === stringa.toLowerCase()){
       console.log('La stringa è già scritta in maiuscolo' + coding);
    } else {
      stringa = stringa.toLowerCase();
      console.log('La stringa trasformata è: ' + stringa);
    }

    Con l’istruzione condizionale valutiamo se la stringa di partenza è già in minuscolo ed il tal caso la stampiamo senza convertirla. Altrimenti convertiamo la stringa e la stampiamo.

    Chiaramente potevamo direttamente convertirla, a prescindere dal fatto che fosse scritta in minuscolo.

    JavaScript toLowerCase terzo esempio

    In questo terzo esempio utilizziamo il metodo getElementById spiegato in questo tutorial: metodo getElementById.

    Prendiamo un valore da un prompt e lo trasformiamo in minuscolo. Dopo lo visualizziamo in una sezione html con id risultato.

    Ecco il codice necessario per la realizzazione dell’esempio proposto che utilizza il metodo toLowerCase di JavaScript.

    let nome = prompt('Inserisci il nome');
    nome = nome.toLowerCase();
    document.getElementById("risultato").innerHTML ="Il nome inserito è: " + nome;

    Ecco dunque il codice html di esempio:

    <h1>Esempio con il metodo toLowerCase e getElementById</h1>
    <label>Inserisci il nome: </label>
    <p id="risultato"></p>

    In questo esempio convertiamo direttamente in maiuscolo il nome senza controllare che già lo sia. Eventualmente, come nell’esercizio precedente potremmo decidere di farlo utilizzando sempre le istruzioni condizionali.

    Conclusione

    In questa lezione abbiamo affrontato il semplice metodo toLowerCase di JavaScript per trasformare in minuscolo delle stringhe prese in input. Nelle prossime lezioni vedremo tanti altri esempi che utilizzano altri metodi sulle stringhe in JavaScript.

    Alcuni link utili

    Tutorial JavaScript

    Il linguaggio JavaScript

    Come utilizzare JavaScript alert

    Come utilizzare JavaScript confirm

    Utilizzare JavaScript prompt

    Variabili e costanti in JavaScript

    Memory game in JavaScript

    Memory game in JavaScript

    In questa lezione realizzeremo il gioco memory game in JavaScript, ovvero il famoso gioco di abbinamento per testare la memoria di un giocatore.

    Per lo sviluppo di questo gioco utilizzeremo alcuni metodi e proprietà di JavaScript che abbiamo studiato nelle lezioni precedenti, tra cui anche metodi e proprietà utili per manipolare il DOM in JavaScript. Vedremo anche l’utilizzo delle funzioni.

    Ecco dunque una demo del gioco che andremo a realizzare:

    Tempo: 0 min 0 sec

    Ecco il link diretto al gioco:

    Primo passaggio del gioco memory game in JavaScript

    Innanzitutto occorre decidere la dimensione della matrice, nel nostro esempio realizzeremo una matrice 4 x 4. Quindi decidiamo come popolare ciascun elemento della matrice. Lo potremmo fare con dei numeri oppure con delle icone.

    Scegliamo di utilizzare queste icone: https://html-css-js.com/html/character-codes/ e inseriamo alcune icone di animali. Dato che stiamo realizzando una matrice 4 x 4 mi serviranno 8 simboli, ripetuti 2 volte ciascuno.

    const arrayAnimali  = ['&#x1f431;', '&#x1f989;', '&#x1f43e;', 
                         '&#x1f984;', '&#x1f98b;', '&#x1f41b;', 
                         '&#x1f41d;', '&#x1f42c;', '&#x1f431;',
                         '&#x1f989;', '&#x1f43e;', '&#x1f984;', 
                         '&#x1f98b;', '&#x1f41b;', '&#x1f41d;','&#x1f42c;'];

    Adesso dobbiamo generare un array random e quindi ci servirà creare una funzione che generi in maniera random gli elementi e li inserisca in un array. Per fare ciò utilizzeremo l'algoritmo Fisher-Yates Shuffle, chi vuole può approfondire al seguente link: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

    function shuffle(a) {
      let currentIndex = a.length;
      let temporaryValue, randomIndex;
    
      while (currentIndex !== 0) {
        const randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex -= 1;
        temporaryValue = a[currentIndex];
        a[currentIndex] = a[randomIndex];
        a[randomIndex] = temporaryValue;
      }
      return a;
    }
    

    Secondo passaggio del gioco memory game in JavaScript

    Il gioco avrà un timer per i secondi trascorsi, dunque creiamo una funzione apposita, dove appena la variabile dei secondi (s) arriva a 60 incrementiamo i minuti. Quando i minuti (m) arrivano a 60 allora incrementeremo le ore (h). Notiamo che è necessario creare una variabile globale (interval) per poi ripulirla ogni volta che avviamo il gioco.

    let interval;
    /*creiamo la variabile globale interval 
    per poterla poi ripulire ogni volta che si inizia il gioco.*/
    
    function startTimer() {
      let seconds = 0;
      let minutes = 0;
    
      interval = setInterval(() => {
        timer.innerHTML = `Tempo: ${minutes} min ${seconds} sec`;
        seconds++;
    
        if (seconds === 60) {
          minutes++;
          seconds = 0;
        }
    
        if (minutes === 60) {
          minutes = 0;
        }
      }, 1000);
    }
    

    Terzo passaggio del gioco memory game in JavaScript

    Adesso realizziamo la funzione startGame che si occupa di far partire il tutto.

    Utilizzeremo un array di appoggio (arrayComparison) per confrontare ogni volta le due carte scoperte.

    Quindi quando parte il gioco creiamo innanzitutto l'array random di animali. Poi ripuliamo la variabile interval che tiene traccia del tempo trascorso e azzeriamo l'arrayComparison.
    Ripuliamo il contenuto del contenitore griglia e con un ciclo for creiamo un elemento div che all'interno contiene un altro elemento div con classe icon.

    Facciamo partire il timer e per ogni card cliccata facciamo partire la funzione displayIcon:

    function startGame() {
        clearInterval(interval);
        arrayComparison.length = 0;
    
        const arrayShuffle = shuffle(arrayAnimali);
    
        const lista = document.getElementById('griglia');
        while (lista.hasChildNodes()) {
          lista.removeChild(lista.firstChild);
        }
    
        for (let i = 0; i < 16; i++) {
          const box = document.createElement('div');
          const element = document.createElement('div');
          element.className = 'icon';
          document.getElementById('griglia').appendChild(box).appendChild(element);
          element.innerHTML = arrayShuffle[i];
        }
    
        startTimer();
    
        const icon = document.getElementsByClassName("icon");
        const icons = [...icon];
    
        for (let i = 0; i < icons.length; i++) {
          icons[i].addEventListener("click", displayIcon);
          icons[i].addEventListener("click", openModal);
        }
      }

    Facciamo partire questa funzione al click del pulsante start o quando si carica la pagina html.

    document.body.onload = startGame();

    Quarto passaggio del gioco memory game in JavaScript

    La funzione displayicon legge tutte le icone caricate e attiva per ciascuna carta scoperta la classe show. Inoltre inserisce la carta scoperta nell'arrayComparison. Quindi determina la lunghezza dell'arrayComparison e se è due confronta le carte, se uguali aggiunge le classi find per attivare l'effetto a rotazione e disabled per disabilitare il click.

    Se non sono uguali dopo 700 millisecondi rimuove la classe show:

    function displayIcon() {
        const icon = document.getElementsByClassName("icon");
        const icons = [...icon];
    
        this.classList.toggle("show");
        arrayComparison.push(this);
    
        const len = arrayComparison.length;
        if (len === 2) {
          if (arrayComparison[0].innerHTML === arrayComparison[1].innerHTML) {
            arrayComparison[0].classList.add("find", "disabled");
            arrayComparison[1].classList.add("find", "disabled");
            arrayComparison.length = 0;
          } else {
            icons.forEach(function (item) {
              item.classList.add('disabled');
            });
            setTimeout(function () {
              arrayComparison[0].classList.remove("show");
              arrayComparison[1].classList.remove("show");
              icons.forEach(function (item) {
                item.classList.remove('disabled');
                for (let i = 0; i < iconsFind.length; i++) {
                  iconsFind[i].classList.add("disabled");
                }
              });
              arrayComparison.length = 0;
            }, 700);
          }
        }
      }

    Finestra modale

    Pensiamo adesso alla finestra modale che appare quando abbiamo indovinato tutte le combinazioni:

    
    const modal = document.getElementById("modal");
    const timer = document.querySelector(".timer");
    
    function openModal() {
        if (iconsFind.length === 16) {
          clearInterval(interval);
          modal.classList.add("active");
          document.getElementById("tempoTrascorso").innerHTML = timer.innerHTML;
          closeModal();
        }
      }
    
     function closeModal() {
        closeicon.addEventListener("click", function (e) {
          modal.classList.remove("active");
          startGame();
        });
      }
    

    Infine la funzione playAgain che ci consente di riavviare il gioco e chiudere la finestra modale:

    function playAgain(){
      modal.classList.remove("active");
      startGame();
    }

    Pagina html del gioco memory game

    Nella pagina html predispongo semplicemente la sezione griglia dove si inseriranno tutte le carte, la sezione che contiene il pulsante per ricominciare il gioco ed il tempo.

    <div class="container icon-grid" id="griglia"></div>
      <div class="container text-center">  
        <input type="button" id="button" class="button" onclick=startGame() value="Ricomincia">
        <div class="timer">Tempo: 0 min 0 sec</div>  
      </div>
    
    <div id="modal">       
       <div class="content">
           <h2>Congratulazioni hai risolto il gioco in </h2>
           <p><span id=totalTime> </span> </p>
           <p><input type="button" class="button" onclick=playAgain() value="Gioca Ancora!"></p>
       </div>        
    </div>
    
    <script src="script.js"></script>
    

    Pagina CSS del gioco memory game in JavaScript

    Potete personalizzare poi il CSS a vostro piacimento, vi allego quello creato nell'esempio:

    .container{
      width: 600px;
      margin:auto;
      background-color: lightgrey;
    }
    
    .text-center {
      text-align: center;
    }
    
    .icon-grid {
      display: flex;
      align-items: center;
      justify-content: center;
      flex-wrap: wrap;
    }
    
    .show {
       visibility: visible;
       opacity: 100;
    }
    
    #griglia &gt; div{
       margin: 20px 10px;
       width: 120px;
       height: 120px;
       background-color: #ffc83d;
       border: 1px solid #3889c4;
       border-radius: 10px;
    }
    
    .timer {
       padding: 10px 0;
    }
    
    .icon {
       font-size: 80px;
       text-align: center;
       visibility: visible;
       opacity:0;
       width: 100%;
       height: 100%;
       cursor: pointer;
    }
    
    .disabled {
       pointer-events: none;
       cursor:wait;
    }
    
    .show {
       animation-name: rotation-icon;
       animation-duration: .5s;
       background-color:white;
       border: 1px solid #3889c4;
       border-radius: 10px;
    }
    
    .find {
       animation-name: guessed;
       animation-duration: .5s;
       background-color:#3889c4;
       border: 1px solid #3889c4;
       border-radius: 10px;
    }
    
    .button{
      color: white;
      font-size: 22px;
      text-align: center;
      margin-top: 10px;
      padding: 10px;
      background-color: #ffc83d;
      border: 1px solid #3889c4;
      border-radius: 5px;
    }
    
    .button:hover{
      background-color: #16486c;
      border:none;
    }
    
     #modal {
        display: none;
        justify-content: center;
        align-items: center;
        width: 100vw;
        height: 100vh;
        background-color: rgba(255, 255, 255, 0.9);
        position: fixed;
        top: 0;
        left: 0;
    }
    
      #modal.active {
        display: flex;
      }
      
      #modal h2 {
        margin-top: 20px;
      }
    
    
    @keyframes guessed{ 
     from { 
        transform: rotate(0deg);
       } 
      to { 
       transform: rotate(360deg);	 
      }
    }
    
    @keyframes rotation-icon {
       from {
    	transform: perspective(300px) rotate3d(0, 1, 0, 80deg);
    	animation-timing-function: ease-in;
       }
    
       50% {
    	transform: perspective(300px) rotate3d(0, 1, 0, -10deg);
    	animation-timing-function: ease-in;
       }
    
       to {
    	transform: perspective(300px);
    	animation-timing-function: ease-in;
       }
    }
    

    Divertitevi a creare altre varianti del Memory game in JavaScript.

    Alcuni link utili

    Indice tutorial JavaScript

    Il linguaggio JavaScript

    Come utilizzare JavaScript alert

    Utilizzare JavaScript prompt

    Variabili in JavaScript

    Gioco indovina numero in JavaScript

    Gioco della morra cinese in JavaScript

    Semplice quiz utilizzando gli array

    Come realizzare il gioco dei dadi online

    Parola più lunga in JavaScript

    Parola più lunga in JavaScript

    Data una stringa, composta da una quantità indefinita di parole, trovare la parola più lunga in JavaScript.

    In questa breve lezione propongo varie soluzioni all’algoritmo proposto, al fine di presentare diversi ragionamenti logici.

    Parola più lunga in JavaScript – prima soluzione

    Partiamo quindi da una semplice frase di esempio:

    const frase = 'Fare coding è divertente.';

    Dopo, con il metodo split, creiamo un array con ciascuna parola. Ricordiamo dunque che al metodo split passiamo uno spazio vuoto per definire la suddivisione delle parole in un array.

    const parole = frase.split(' ');
    console.log(parole);

    Nella console del nostro browser vedremo come risultato un array di 4 elementi: (4) [“Fare”, “coding”, “è”, “divertente.”]

    Adesso dobbiamo determinare quali delle seguenti parole è più lunga. Quindi inizializziamo il valore massimo alla prima parola e dopo, con un ciclo for controlliamo se la lunghezza delle altre parole è maggiore di quella inziale. Se la condizione si verifica sostituiamo il valore massimo, altrimenti non facciamo nulla.

    let max = parole[0];
    
    for(let i = 0; i < parole.length; i++){
      if(parole[i].length > max.length ){
        max = parole[i];
      }
    }
    
    console.log('la parola più lunga della frase è: ' + max);
    

    Parola più lunga in JavaScript – seconda soluzione

    Analizziamo l’algoritmo per cercare un’altra possibile soluzione. Infatti ci viene in mente che se ordiniamo l’array in modo che gli elementi che hanno una lunghezza maggiore siano posizionati per primi, allora basterà estrapolare il primo elemento per determinare la parola più lunga.

    Per fare ciò utilizzeremo quindi il metodo sort sugli array e gli passeremo come parametro una funzione, come abbiamo fatto nella seguente lezione: sort in JavaScript.

    const frase = 'Fare coding è divertente';
    const parole = frase.split(' ');
    
    const paroleLunga = parole.sort(function(a, b) {
      return  b.length - a.length;
    });
    
    console.log(paroleLunga[0]);

    Con la funzione passata all’algoritmo sort realizziamo un ordinamento in base alla lunghezza decrescente di ciascuna parola. Quindi per ottenere la parola più lunga basterà semplicemente stampare il primo elemento.

    Conclusioni

    Chiaramente queste sono solo delle possibili soluzioni alla ricerca della parola più lunga in JavaScript, proponete pure la vostra soluzione.

    Alcuni link utili

    Tutorial JavaScript

    Come utilizzare JavaScript alert

    Utilizzare JavaScript prompt

    Variabili in JavaScript

    Gioco indovina numero in JavaScript

    Gioco della morra cinese in JavaScript

    Semplice quiz utilizzando gli array

    Come realizzare il gioco dei dadi online

    Parola palindroma in JavaScript

    Parola palindroma in JavaScript

    In questo tutorial verificheremo se una parola è palindroma in JavaScript.

    Per risolvere questo algoritmo possiamo utilizzare varie soluzioni.

    Utilizzo del metodo reverse per il calcolo della parola palindroma in JavaScript

    In questa prima soluzione, la più semplice, ci appoggeremo al metodo reverse di JavaScript per verificare se la parola presa in input è palindroma.

    Ma il metodo reverse si applica ad un array, dunque la soluzione è proprio quella di trasformare la stringa in un array. Il tutorial inerente il metodo reverse lo trovate al seguente link: metodo reverse sugli array.

    Quindi utilizzeremo innanzitutto il metodo split per suddividere il testo in sottostringhe. Ricordiamo che, se utilizziamo il metodo indicando tra parentesi gli apici vuoti, otteniamo un array che contiene le lettere della parola.

    Corso su JavaScript

    Dunque supponendo di avere la seguente parola in input:

    const parola = 'Osso';

    Applichiamo il metodo split a parola:

    let parolaDivisa = parola.split('');
    console.log(parolaDivisa); // [ 'O', 's', 's', 'o' ]

    Otterremo un array di 4 elementi, così composto:

    0: “o”

    1: “s”

    2: “s”

    3: “o”

    Quindi adesso utilizziamo il metodo reverse per invertire l’array.

    parolaDivisa = parolaDivisa.reverse();
    console.log(parolaDivisa); [ 'o', 's', 's', 'O' ]

    In questo caso otterremo l’array inverito, infatti la O maiuscola rappresenta l’ultima elemento dell’array. Provate con altre parole.

    Adesso occorre riunire le lettere, per ottenere nuovamente la stringa e per fare questo utilizzeremo il metodo join:

    const parolaInvertita = parolaDivisa.join('');
    console.log(parolaInvertita);

    Quindi dobbiamo solo confrontare la parola iniziale con quella invertita per verificare se è palindroma, per fare ciò utilizzeremo semplicemente un’istruzione condizionale.

    if(parola === parolaInvertita){
      console.log('la parola è palindroma');
    } else {
      console.log('la parola non è palindroma');
    }

    In questo caso avremmo in output: ‘la parola non è palindroma’ in quanto fa distinzione tra lettere maiscuole e minuscole.

    Potremmo allora utilizzare toLowerCase() per convertire la parola iniziale in minuscolo. Di seguito il programma completo:

    const parola = 'osso';
    let parolaDivisa = parola.toLowerCase().split('');
    
    parolaDivisa = parolaDivisa.reverse();
    
    const parolaInvertita = parolaDivisa.join('');
    
    if(parola === parolaInvertita){
      console.log('la parola è palindroma');
    } else {
      console.log('la parola non è palindroma');
    }
    

    Il tutto si potrebbe risolvere con l’utilizzo di una funzione per poterla poi utilizzare su altri casi:

    
    const parola = 'osso';
    
    const parolaInversa = invertiParola(parola);
    
    if(parola === parolaInversa){
        console.log('la parola è palindroma');
      } else {
        console.log('la parola non è palindroma');
      }
      
    function invertiParola(str){
      const strInversa = str.toLowerCase().split('').reverse().join('');  
      return strInversa;
    }
    

    Parola palindroma in JavaScript – seconda soluzione

    Come vi dicevo, la soluzione presentata sopra non è l’unico modo per risolvere l’algoritmo. Possiamo trovare una soluzione che invece di utilizzare i metodi appena visti sopra, cerchi di prendere lettera per lettera e poi la ricomponga al contrario.

    Quindi ci servirà un’istruzione ciclica sulla lunghezza della parola che ad ogni iterazione estrapoli ciascuna lettera.

    Dunque con un ciclo while che scorre la parola partendo dalla fine, estraiamo ciascun carattere e lo inseriamo in una variabile. Dopo, con un’istruzione condizionale, verifichiamo se la parola presa in input è palindroma.

    const parola ='osso';
    let carattere;
    let parolaInversa = '';
    
    let i = parola.length - 1;
    
    while (i >= 0) {
      carattere = parola[i];
      parolaInversa += carattere;
      console.log(carattere);
      i--;
    }
    
    console.log(parolaInversa);
    
    if (parola === parolaInversa) {
        console.log('La parola è palindroma');
    } else {
        console.log('La parola non è palindroma');
    }
    

    Possiamo al solito sviluppare una funzione così da riutilizzarla all’occorrenza:

    const parola ='otto';
    let parolaInversa = invertiParola(parola);
    
    if (parola === parolaInversa){
        console.log('la parola è palindroma');
      } else {
        console.log('la parola non è palindroma');
    }
    
    function invertiParola(str){
      let parolaInversa = '';
    
      let i = str.length - 1;
    
      while (i >= 0) {
        parolaInversa += str[i];
        i--;
      }
    
      return parolaInversa;
    }
    

    Corso su JavaScript

    Funzione ricorsiva per verificare se una parola è palindroma in JavaScript

    Propongo adesso un’altra soluzione all’algoritmo utilizzando una funzione ricorsiva. Utilizzeremo anche i metodi per le stringhe, substring e charAt.

    function invertiParola(str) {
      if (str !== "")
        return invertiParola(str.substr(1)) + str.charAt(0);
     else
       return ""; //quando terminerà l'estrazione delle lettere
    }
    
    console.log(invertiParola("coding"));

    Quindi utilizzeremo delle chiamate nidificate. Quando richiamo invertiParola su coding, otterrò dunque questo risultato:

    1 – invertiParola("coding") - 
    substring(1) vuol dire che parte dalla pos. 1 fino alla fine 
    + charAt(0) cioè la prima lettera, 
    quindi si ottiene il return di invertiParola("oding") + "c"
    ... e così via ... 
    6 – invertiParola("g")   ritornerà invertiParola("") + "g"
    
    Quindi nella seconda parte si avrà 
    return invertiParola("") + "g" = "g"
    return invertiParola("g") + "n" = "g" + "n"
    ... e così via ...
    return invertiParola("oding") + "c" = "g" + "n" + "i" + "d" + "o" + "c" 
    

    In questa lezione abbiamo affrontato alcune possibili soluzioni alla parola palindroma in JavaScript, chiaramente ce ne possono essere tante altre, provate pure a sviluppare al vostra.

    Alcuni link utili

    Tutorial JavaScript

    Come utilizzare JavaScript alert

    Utilizzare JavaScript prompt

    Variabili in JavaScript

    Gioco indovina numero in JavaScript

    Gioco della morra cinese in JavaScript

    Semplice quiz utilizzando gli array

    Esercizi sulle stringhe in JavaScript

    Esercizi sulle stringhe in JavaScript

    In questa lezione propongo dei semplicissimi esercizi sulle stringhe in JavaScript, al fine di approfondire tutti i metodi e le proprietà precedentemente studiate.

    Esercizi sulle stringhe in JavaScript – primo esercizio

    Creare un programma che cerchi in una frase la sotto-stringa composta dalle parole coding e creativoo. Se trova entrambe le parole restituisce la frase, altrimenti stampa come risultato parole non trovate.

    Innanzitutto memorizziamo in una variabile una stringa:

    let str = "Fare coding creativo è bello";

    Dopo utilizziamo il metodo indexOf che ricordiamo restituisce -1 se non trova una stringa, altrimenti restituisce la posizione di inizio della stringa.

    const codingIndex = str.indexOf('coding');
    console.log(codingIndex);
    
    const creativoIndex = str.indexOf('creativo');
    console.log(creativoIndex);

    Quindi se i due indici sono diversi da -1 stampiamo in console la frase completa, altrimenti stampiamo parole non trovate:

    if (codingIndex != -1 && creativoIndex != -1) {  
      console.log(str);
     } else {
      console.log('parole non trovate');
     }

    Se utilizzassimo le funzioni in JavaScript, che spiegherò più avanti, avremmo il vantaggio di riutilizzare il codice su più stringhe.

    Corso su JavaScript

    Ecco dunque una possibile implementazione nella quale prendiamo due frasi diverse a cui applicheremo la funzione cerca che prende come argomento una stringa:

    
    const frase1 = 'Fare coding creativo è bello';
    const frase2 ='Oggi splende il sole';
    
    const risultato = cerca(frase1);
    console.log(risultato);
    
    const risultato2 = cerca(frase2);
    console.log(risultato2);
    
    function cerca(stringa){
      const codingIndex = stringa.indexOf('coding');
      const creativoIndex = stringa.indexOf('creativo');  
      
      if (codingIndex != -1 && creativoIndex != -1) {  
        return stringa;
       } else {
        return 'la stringa non è presente';
       }
    }
    

    Esercizi sulle stringhe in JavaScript – secondo esercizio

    Prendere in input due semplici stringhe che contengono una sola parola, dopo restituire le due stringhe concatenate, scambiando i primi due caratteri di ciascuna stringa.

    Controlliamo che le stringhe abbiano almeno 2 caratteri, visualizzando un messaggio di errore nel momento in cui non li hanno. Per questo scopo utilizziamo la proprietà length di JavaScript sulle stringhe.

    Altrimenti sostituiamo le seconde lettere di ciascuna parola, utilizzando i metodi slice e substring sulle stringhe.

    const parola1 = 'Nanno';
    const parola2 = 'Coro';
    
    if (parola1.length < 3 || parola1.length < 3 ) {
      console.log('attenzione le stringhe inserite non sono più lunghe di 2 caratteri');  
    } else {
      const stringa1 = parola1.slice(0, 1) + parola2.slice(1,2) + parola1.substring(2);
      const stringa2 = parola2.slice(0, 1) + parola1.slice(1,2) + parola2.substring(2);
      const stringaUnita = stringa2 + ' ' + stringa1;
      console.log(stringaUnita);
    }
    

    Anche in questo caso possiamo utilizzare una funzione per richiamarla più volte. Dunque creo una funzione changeLetter che prende come argomenti due parametri, p1 e p2.

    const parola1 = 'Nanno';
    const parola2 = 'Coro';
    
    function changeLetter(p1,p2){
      if (p1.length < 3 || p2.length < 3 ) {
        return 'attenzione le stringhe inserite non sono più lunghe di 2 caratteri';  
      } else {
        const stringa1 = p1.slice(0, 1) + p2.slice(1,2) + p1.substring(2);
        const stringa2 = p2.slice(0, 1) + p1.slice(1,2) + p2.substring(2);
        return stringaUnita = stringa2 + ' ' + stringa1;
      }
    }
    
    

    Dopo richiamo la stessa funzione due volte con parole diverse.

    const parola1 = 'Nanno';
    const parola2 = 'Coro';
    
    const risultato = changeLetter(parola1,parola2);
    console.log(risultato);
    
    const parola3 = 'Caro';
    const parola4 = 'Remo';
    
    const risultato2 = changeLetter(parola3,parola4);
    console.log(risultato2);
    

    Si potrebbe generare una funzione specificando anche la posizione dei caratteri da cambiare.

    Conclusione

    In questa lezione abbiamo svolto alcuni semplici esercizi sulle stringhe in JavaScript, nelle prossime lezioni non mancheranno tanti altri esempi.

    Alcuni link utili

    Tutorial JavaScript

    Come utilizzare JavaScript alert

    Utilizzare JavaScript prompt

    Variabili in JavaScript

    Gioco indovina numero in JavaScript

    Gioco della morra cinese in JavaScript

    Semplice quiz utilizzando gli array

    Come realizzare il gioco dei dadi online