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,217
    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?
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  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,217
    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
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

  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,217
    cmq grazie funziona perfettamente.
    bene, buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web. Ti resta... humm spè
    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

    "Mi son documentato"

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