Array.prototype.filter in forEach

di il
5 risposte

Array.prototype.filter in forEach


JSON.parse(check.responseText).filter(!array_order.includes(response.Numero_Ordine)).forEach(function(response){

}
Come poter utilizzare il filter se la condizione responde.NumeroOrdine non è stata ancora ciclata dal forEach?
Vorrei evitare l'uso dell'if e di return all'interno del forEach

5 Risposte

  • Re: Array.prototype.filter in forEach

    melixo ha scritto:


    Come poter utilizzare il filter se la condizione responde.NumeroOrdine non è stata ancora ciclata dal forEach?
    Vorrei evitare l'uso dell'if e di return all'interno del forEach
    Se posso permettermi, questo pezzo di codice che hai scritto - sorvolando sul fatto che funzioni oppure no - è al limite della leggibilità: non si capisce nulla.

    L'uso di filter è sicuramente errato: vedi gli esempi in questa pagina.

    Per il resto, se intendi fare uso di una tecnica di "method chaining" scrivendo le chiamate una dopo l'altra, o metti una indentazione chiara, o comunque rendi il codice interpretabile evitando di scriverlo tutto su un'unica riga; in alternativa, il risultato di ogni step può essere assegnato a una variabile, in modo da estendere in verticale la logica dello script, che senz'altro risulta più comprensibile rispetto all'espanderla in orizzontale.

    In merito al problema specifico poi, se occorre ulteriore aiuto, aggiungerei anche qualche dettaglio in merito al contesto e a quello che stai cercando di fare...

    Ciao!
  • Re: Array.prototype.filter in forEach

    Eh, se già non sono stato chiaro con una riga di codice, se scrivo tutto il contesto faccio prima a captare segnali dallo spazio
    anche nell'altro post, più leggibile di così non lo so fare, ho usato i tag codice.
    Certo che in queste formattazioni di questo forum non è molto leggibile di suo
    non ci sono siti dove mettere il codice leggibile e danno un link pubblico?
  • Re: Array.prototype.filter in forEach

    Trovato!
    ecco il contesto
  • Re: Array.prototype.filter in forEach

    melixo ha scritto:


    Eh, se già non sono stato chiaro con una riga di codice, se scrivo tutto il contesto faccio prima a captare segnali dallo spazio
    Descrivere il contesto vuol dire spiegare brevemente quello che stai cercando di fare, ossia i requisiti e gli obiettivi che vuoi ottenere con il codice che scrivi.

    melixo ha scritto:


    anche nell'altro post, più leggibile di così non lo so fare, ho usato i tag codice.
    Certo che in queste formattazioni di questo forum non è molto leggibile di suo
    Qui c'è un fraintendimento: la leggibilità del codice non è un problema di formattazione (in realtà anche quello è un aspetto, ma non è questo il caso), bensì di *come* si scrive il codice, dell'approccio stilistico che si usa, della chiarezza delle forme che si adottano, della lunghezza delle righe di codice, dell'eseguire operazioni passo per passo, dell'usare nomi significativi, dell'adottare standard di codifica uniformi, ecc. ecc..

    melixo ha scritto:


    Trovato!
    ecco il contesto
    Come dicevo appunto prima, quello che hai postato non è un contesto: è una sbrodolata di codice disordinato da debuggare a fatica dove non si capisce qual è l'obiettivo e dove non viene seguito un ordine preciso e chiaro.

    Qualche esempio?
    function INDIRIZZI(){
    Una funzione per sua natura esegue una operazione oppure restituisce un valore di ritorno che è il calcolo o il risultato dell'operazione stessa. Il nome "INDIRIZZI" non indica nulla, oltre a essere errato poiché le convenzioni del linguaggio JavaScript richiedono l'uso del Camel Case.

    Avrai notato che le funzioni del DOM non usano il tuo standard, e hanno un nome relativamente chiaro che indica quello che fanno?

    GetElementsByClassName è parlante.
    INDIRIZZI no.
    
    let indirizzi = new XMLHttpRequest();
    
    Anche qui, siamo di fronte a un oggetto che rappresenta una richiesta, e il suo nome invece è semplicemente indirizzi, a rischio di essere confuso con la suddetta funzione INDIRIZZI.
    
        let userscore = document.getElementsByClassName('user-score');
        let spazio_inserimento = document.getElementsByClassName('user-details details');
        let ORDER = document.querySelectorAll('input[data-ordernumber]');
        let Numero_Ordine = ORDER[m].getAttribute('data-ordernumber');
    
    Qui le variabili usano ben 3 standard: tutto minuscolo, minuscolo con underscore (si usa solo in Python), tutto maiuscolo, maiuscolo con underscore.

    Il problema non è quasi l'uso di più standard, ma.... ce ne fosse almeno uno ricorrente.

    La confusione nell'attribuzione di nomi uniformi denota confusione "interna", e comunque non aiuta a trovare gli errori.
    
    spazio_inserimento[m].innerHTML += "<br><br><p id='"+userid[m].textContent+":"+Numero_Ordine+"' align='center'><b><i><u>Indirizzo Spedizione</u></i></b></p>";
    
    Non si accoda mai ripetutamente codice HTML a un elemento, ma ci si appoggia prima a una stringa e poi si imposta sul controllo il contenuto HTML finale, ottenuto al termine dell'accodamento: scrivere e riscrivere il contenuto HTML comporta creare e ricreare oggetti del DOM e risulta molto più lento.

    Inoltre, i tag di formattazione classici (<b>, <u>, ecc.) sono deprecati, ed è meglio usare classi e stili per la formattazione, che eviterebbe anche di scrivere formattazione nel codice JavaScript rendendo anche più difficile una successiva personalizzazione del markup generato. Salvo casi rari e specifici, gli stili stanno nei CSS, punto.
    
    document.getElementById(BuyerID+":"+Numero_Ordine)
    
    La riga qui sopra si ripeterà un migliaio di volte nello script: perché non creare ad esempio una funzione che, dato il BuyerID e il NumeroOrdine, faccia un controllo che siano formalmente validi (es. non vuoti e numerici) e restituisca l'elemento corrispondente del DOM con l'istruzione sopra? E' sufficiente dimenticarsi un ":" una volta affinché il programma non funzioni più, e le operazioni più ripetitive vanno incapsulate preferibilmente per poterle collaudare e, una volta testate come correttamente funzionanti, riutilizzare nel resto del codice in modo da semplificarlo.

    Mi fermo qui perché analizzare tutto il resto sarebbe un lavoro estremamente lungo e improbo, ma io qui vedo grossa necessità di ulteriore studio e di usare maggior rigore nello scrivere codice, sforzandosi di semplificare, semplificare, semplificare il più possibile, pena l'insorgenza di errori magari assurdi e difficili da diagnosticare.

    Comunque, alla peggio, usa il debugging e metti dei breakpoint nel codice, eseguendolo passo per passo e verificando quello che succede.

    Ciao!
  • Re: Array.prototype.filter in forEach

    E non hai visto il resto del codice!!
    Grazie Alka comunque. Comunque critiche come le tue sono costruttive e le apprezzo molto, e sono pure le uniche che ricevo perché io nella realtà non conosco proprio nessuno che programma, quindi non ho nessuna possibilità di confronto.
    Ho solamente forum, internet e dei libri nemmeno tanto recenti
    In più tra lavoro e famiglia proporzionalmente credo anzi di aver fatto miracoli. Dalla mia, sempre proporzionalmente parlando, credo di avere un po' di intuito, perché a volte voglio fare delle cose che richiedono molte più conoscenze di quelle che ho, però mi rendo conto che riesco quasi sempre a brancolare bene nel buio e arrivare piano piano a quello che volevo fare.
    In effetti faccio parecchio casino quando "programmo", e sono anche lento, ci metto molto ad arrivare a quello che voglio fare, anche perché non sono per niente esperto.
    A volte mi dico che quello che realizzo è un insulto a chi programma veramente. Non saprei come spiegarlo, ma a volte sembra che ciò che creo sia troppo rispetto a ciò che conosco. In realtà non conosco nemmeno approfonditamente proprio tutte le righe che scrivo... so che chiunque altro ci arriverebbe meglio e più velocemente, e quando ci arrivo mi stupisco di esserci riuscito.
    Qualche mese fa pensavo a quanto mi sarebbe piaciuto modificare la pagina di Ebay e farla come piaceva a me.
    Sapevo solamente che un codice sorgente poteva essere modificato tramite Javascript, ma non sapevo da dove inziare. Ho comincio con il libro di Javascript, a spulciare il codice sorgente e a utilizzare tampermonkey e oggi ci sono riuscito.
    Mi sento però un "intruso" nel mondo della programmazione. Persone come te lo avrebbero fatto ridendo a occhi chiusi. Per me è come aver scalato una montagna.
    Ad ogni modo grazie mille

    ...anche se ancora non riesco ad acchiappare quel tag button...
Devi accedere o registrarti per scrivere nel forum
5 risposte