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

    Map e reduce con moltiplicazione tra elementi

    ciao!

    probabilmente domanda banale, ma non sono riuscito a capire come fare questa cosa.

    partiamo dall'esempio in cui faccio solo la somma di un campo dell'array:
    codice:
    this.sumQta = this.giacenze.map(a => a.giacenza_qta).reduce((a, b) => {
        return Number(a) + Number(b);
    });
    se io invece avessi bisogno di fare una somma e moltiplicazione (senza usare il forEach classico)?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ciao, non ho ben capito cosa vuoi moltiplicare.

    Con a+b (dentro "reduce") ottieni la somma di tutti i valori; e fino a qui ci sei.

    Non mi è chiaro però cosa intendi per "somma e moltiplicazione"

    Puoi fare degli esempi di risultato usando dei valori fittizi?

    Partiamo ad esempio da questo:
    codice:
    ['1', '2', '1', '5'].reduce((a, b) => {
       return +a + +b;
    }); // output: 9
    ora, dove vorresti applicare la moltiplicazione e quale dovrebbe essere il risultato?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    ciao!

    allora, in pratica devo ottenere sempre un numero.
    ma invece di fare solo la somma del campo giacenza_qta, dovrei fare giacenza_qta * giacenza_prezzo_acquisto.
    in sostanza devo calcolare l'importo totale.

    questo è l'esempio col forEach:
    codice:
    this.giacenze.forEach((item) => {
        this.sumValore += (item.giacenza_qta * item.giacenza_prezzo_acquisto);
    });
    e poi sumValore lo visualizzo sulla pagina.
    volevo capire se esiste un modo per fare la stessa cosa con map e reduce.

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    giacenza_prezzo_acquisto
    ecco, questo è un dettaglio fondamentale che avresti dovuto indicare da subito
    Avevo intuito che mancava qualche variabile e qual'era la tua intenzione, ma è sempre meglio chiarire.

    Quindi per ogni item hai le due proprietà giacenza_qta e giacenza_prezzo_acquisto da cui vuoi ottenere il prodotto per poi sommare assieme tutti i risultati e ottenere il totale.

    Direi che il map() è superfluo in questo caso, sarebbe un passaggio in più, invece puoi giusto usare il metodo reduce() impostando 0 come valore iniziale (secondo argomento di tale metodo) e giocando con le specifiche proprietà per ogni elemento processato:
    codice:
    this.sumQta = this.giacenze.reduce((a, b) => +b.giacenza_qta * +b.giacenza_prezzo_acquisto + a, 0);

    Il passaggio è abbastanza intuitivo ma se hai bisogno di chiarimenti chiedi pure
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    ciao!

    si hai ragione, in effetti senza quella info è un pò più complicato capire!

    cmq grazie funziona perfettamente.
    adesso ho capito dove sbagliavo!

  6. #6
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    cmq grazie funziona perfettamente.
    bene, buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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 © 2024 vBulletin Solutions, Inc. All rights reserved.