Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Problema per un neofita

    Ciao a tutti ragazzi. Ho cominciato da qualche settimana a studiare in modo blando javascript in vista di un corso come sviluppatore software che inizierò a breve.
    Sto facedo vari esercizi super semplici che si trovano online ma mi sono bloccato al seguente:

    <!--Creare una pagina in cui il sistema chiede all'utente il proprio nome
    Il sistema verifica il nome e comunica all'utente se è un amministratore o meno
    E' dato un array di nomi che hanno i diritti di amministratore-->
    Con la seguente scrittura funziona tutto:

    let a = prompt('Inserici il tuo nome');
    let admin = new Array ('Luca', 'Marco', 'Paolo');


    if (a.includes('Luca', 'Marco', 'Paolo')) {
    alert('Sei amministratore');
    }else if (a == ''){
    alert('Err: inserisci un nome');
    }else{
    alert('Non sei aministratore');
    }

    Il fatto è che io vorrei evitare di includere i vari nomi all'interno di admin nella funzione if, vorrei fare in modo che automaticamente controllasse se il nome che io inserisco nel prompt è presente nell'array e di conseguenza ricevere come output l'alert corretto.
    Da quello che ho capito leggendo la documentazione online, la funzione .includes deve contenere al suo interno dei parametri (al massimo l'indice dell'array se cerco anche la posizione) ma se io volelssi controllare una variabille e non un paramentro come posso fare?

    Grazie in anticipo!


    Ps: Spero di non aver infranto nessuna regola del forum aprendo subito una discussione dopo la registrazione

  2. #2
    Utente di HTML.it L'avatar di ninja72
    Registrato dal
    May 2020
    residenza
    -
    Messaggi
    319
    L'errore sta nel fatto che tu utilizzi il metodo includes
    relativo alle stringhe e non quello dell'array.
    I comportamenti sono molto diversi, visto che quello relativo alle
    stringhe fa un ricerca per determinare se una stringa puo essere trovata
    all'interno di un'altra stringa.
    Infatti se provi a scrivere Paolo123 ti verrà restituito true invece di false.

    Dovresti ragionare all'inverso e cioè :

    array.includes(searchElement)

    e non :

    string.includes(searchString)

    Oltretutto stai sbagliando perchè cerchi di passare argomenti ad string.includes()
    mentre il metodo vuole solo una stringa di ricerca.

    Ps. In breve, per risolvere ti basta scrivere admin.includes(a)


    Questo è un esempi di come potresti rifattorizzare il tutto.

    codice:
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    
    <body>
    
        <input type="text" name="nome" id="nome">
        <button id="verifica" type="button">Verifica Admin</button>
        <div id="result"></div>
    
        <script>
            
            // assegnazione degli elementi DOM
            const inputAdmin = document.getElementById('nome')
            const btnVerifica = document.getElementById('verifica')
            const resulView = document.getElementById('result')
    
            /*
            Converte l'array in stringa per trasformare tutto il testo in minuscolo
            per poi convertirlo nuovamente in array
            */
            const admin = ['Luca', 'Marco', 'Paolo']
                .toString()
                .toLowerCase()
                .split(',')
    
            // Arrow function expressions di verifica del nome
            const adminVerify = () => {
                // l'input viene convertito in minuscolo
                const nome = String(inputAdmin.value).toLowerCase()
    
                // ** metodi array alternativi a includes() **
                // const result = admin.some(e => e === nome)
                // const result = admin.indexOf(inputAdmin.value) > -1
                
                // Qui viene utilizzato l'operatore ternario in alternativa al costrutto if
                const result = admin.includes(nome)
                    ? 'Sei amministratore'
                    : (nome == '')
                        ? 'Err: inserisci un nome'
                        : 'Non sei aministratore'
                resulView.textContent = result
            }
            // assegnazione Arrow function expressions a evento click del button 
            btnVerifica.addEventListener('click', adminVerify)
    
        </script>
    </body>
    
    </html>
    Ultima modifica di ninja72; 01-11-2022 a 16:32

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.