Home > Blockchain >  How to navigate through all the values of an array of object
How to navigate through all the values of an array of object

Time:10-21

I'm trying to make a function that will get every key "quantidade", take their values, and multiply for the corresponding "tecnologia" key of the parent key, if the object has the "A" key in "tecnologia", it will multiply for the "A" value in the first object, this is what i did so far:

function calculaCusto (tabelaCusto, arvoreArquitetura) {
    for (i = 0; i < arvoreArquitetura.length; i  ) {
        arrFilhos = [`["filhos"][x]`]
        arrArvore = [`arvoreArquitetura[i]`]
        arrLevel = []

        for(x = 0; x < arvoreArquitetura[i]["filhos"].length; x  ){
            if ("filhos" in eval(arrArvore[0])){
                console.log(eval(arrArvore.toString().replace(/,/g , "")))
                arrArvore.push(arrFilhos[0])
            }
        }
    }
}

And this is the object:

calculaCusto({
    "A": 1304.50,
    "B": 234.65,
    "C": 1032.00
   },

   [
    {
    "quantidade": 2,
    "filhos": [

        {
        "tecnologia": "A",
        "quantidade": 2,
        "filhos": []
                    },

        {
        "tecnologia": "B",
        "quantidade": 3,
        "filhos": []
                    }
                ]
            },

    {
    "quantidade": 5,
    "filhos": [

        {
        "quantidade": 3,
        "filhos": [

            {
            "tecnologia": "B",
            "quantidade": 1,
            "filhos": []
                        },

            {
            "tecnologia": "C",
            "quantidade": 4,
            "filhos": []
                        }
                    ]
                }
            ]
        }
    ]
)

If anyone can help, i would be grateful.

CodePudding user response:

I'm assuming that tecnologia only exists in the last node

function calculaCusto (tabelaCusto, arvoreArquitetura) {
   const cb = (prev, next) => {
     if(next.tecnologia) {
       return prev   next.quantidade * tabelaCusto[next.tecnologia];
     }
     else if(next.filhos){
       return prev   next.quantidade * next.filhos.reduce(cb, 0);
     } else { //doesn't have tecnologia nor filhos
       return;
     }
   }

   return arvoreArquitetura.reduce(cb, 0);
}
  • Related