Tengo problemas con mi código porque creo que no es flexible si se inserta una nueva matriz en mi matriz anidada, no consideraré la nueva matriz. Lo importante es cómo accedo al primer elemento, luego al segundo y así sucesivamente a la vez de cada arreglo.
Aquí hay un ejemplo:
const nestedArr = [ [ "COCA - COLA ORIGINAL 355 ML VIDRIO RET", "COCA - COLA ORIGINAL 600 ML PET NR", "COCA - COLA ORIGINAL 2.5 LT RET"], [ "$176.02", "$100.00", "$130.00" ], [ "10", "3", "15" ] ] const ordersObj = [] for (let i=0; i< nestedArr[0].length; i++){ var name = orderArr[0][i]; var price = Number(orderArr[1][i].replace("$","")); var qty = orderArr[2][i]; var amount = price * qty; ordersObj.push({name,price,qty,amount}) }Lo que me gustaría hacer es evitar poner 0,1,2 para establecer la posición de la matriz anidada a la que quiero acceder, quiero ejecutar un ciclo o cambiar mi código para que 0,1,2 no estén codificados .
Saludos
Parece que tu código es un poco desordenado, supongo:
const nestedArr = [ [ "COCA - COLA ORIGINAL 355 ML VIDRIO RET", "COCA - COLA ORIGINAL 600 ML PET NR", "COCA - COLA ORIGINAL 2.5 LT RET"], [ "$176.02", "$100.00", "$130.00" ], [ "10", "3", "15" ] ] const ordersObj = [] for (let i=0; i< nestedArr[0].length; i++){ // This has no value yet // var name = orderArr[0][i]; // this should be var name = nestedArr[0][i] var price = Number(nestedArr[1][i].replace("$","")); var qty = nestedArr[2][i]; var amount = price * qty; ordersObj.push({name,price,qty,amount}) }Recomendaría no tratar de hacerlo todo en un ciclo, sino más bien definir una función constructora para su objeto y asignar la fuente nestedArr a una matriz 2D más utilizable con cada propiedad en su índice dado en las sub-matrices (aquí usando un función zip de la utilidad, veaesta pregunta para la discusión).
const nestedArr = [ ['COCA - COLA ORIGINAL 355 ML VIDRIO RET', 'COCA - COLA ORIGINAL 600 ML PET NR', 'COCA - COLA ORIGINAL 2.5 LT RET'], ['$176.02', '$100.00', '$130.00'], ['10', '3', '15'], ]; const OrderObj = ([name, price, qty]) => { const _price = Number(price.replace('$', '')); const _qty = Number(qty); return { name, price: _price, qty: _qty, amount: _price * _qty, }; }; const zip = (...rows) => [...rows[0]].map((_, i) => rows.map((row) => row[i])); const orderObjs = zip(...nestedArr).map(OrderObj); console.log(orderObjs); // console.log(zip(...nestedArr)); /* [ [ 'COCA - COLA ORIGINAL 355 ML VIDRIO RET', '$176.02', '10' ], [ 'COCA - COLA ORIGINAL 600 ML PET NR', '$100.00', '3' ], [ 'COCA - COLA ORIGINAL 2.5 LT RET', '$130.00', '15' ] ] */ Agregar más filas a nestedArr simplemente requiere ajustar su constructor para tener en cuenta las nuevas filas con los parámetros desestructurados que sirven como leyenda para las filas en nestedArr .
const nestedArr = [ ['COCA - COLA ORIGINAL', 'COCA - COLA ORIGINAL', 'COCA - COLA ORIGINAL'], ['$176.02', '$100.00', '$130.00'], ['355 ML VIDRIO RET', '600 ML PET NR', '2.5 LT RET'], // <─── added row ['10', '3', '15'], ]; // ┌───────────────────────────── added index const OrderObj = ([name, price, size, qty]) => { const _price = Number(price.replace('$', '')); const _qty = Number(qty); return { name, size, // <───────────────────────────────────────────────── added property price: _price, qty: _qty, amount: _price * _qty, }; }; const zip = (...rows) => [...rows[0]].map((_, i) => rows.map((row) => row[i])); const orderObjs = zip(...nestedArr).map(OrderObj); console.log(orderObjs);