Usando lodash, me pregunto si hay una mejor manera de hacer esto.
Tengo un objeto de matriz como el siguiente.
{ "ALFA ROMEO": { "MITO": [{ "carData": "stuff" }] }, "AUDI": { "A1": [{ "carData": "stuff" }, { "carData": "stuff" } ], "Q3": [{ "carData": "stuff" }], "A3": [{ "carData": "stuff" }, { "carData": "stuff" }, { "carData": "stuff" } ] } }Estoy usando _.forEach para iterar a través del objeto para estructurar la salida similar a esta:
ALFA ROMEO - 1 MITO (1) AUDI - 5 A1 (2) Q3 (1) A3 (2)Usando esto puedo llegar a una parte del camino:
_.forEach(jData, (val, key) => { console.log(key) _.forEach(val, (val, key) => { console.log(' ' + key + ' (' + val.length + ')') }) })Que me dan esto:
ALFA ROMEO MITO (1) AUDI A1 (2) Q3 (1) A3 (2)Mi pregunta es esta:
a) ¿Hay una mejor manera de hacer esto sin un doble bucle?
b) ¿La única forma de obtener un total para cada marca es sumando los recuentos del modelo, o hay una mejor manera de hacerlo?
Gracias.
No hay forma de hacerlo sin bucles anidados, ya que necesita imprimir cada modelo.
Puede usar _.sumBy() para obtener las longitudes totales de los modelos, de modo que pueda mostrar eso antes del bucle.
const jData = { "ALFA ROMEO": { "MITO": [{ "carData": "stuff" }] }, "AUDI": { "A1": [{ "carData": "stuff" }, { "carData": "stuff" } ], "Q3": [{ "carData": "stuff" }], "A3": [{ "carData": "stuff" }, { "carData": "stuff" }, { "carData": "stuff" } ] } }; _.forEach(jData, (val, key) => { let total = _.sumBy(_.toArray(val), 'length'); console.log(`${key} - ${total}`) _.forEach(val, (val, key) => { console.log(`${key} (${val.length})`) }) }) <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>