tengo tres arreglos
product_id = []; product_category_id =[]; product_amount =[];en esto, las matrices son dinámicas ya que provienen de la selección del usuario. Pero lo que quiero hacer es si las identificaciones de los productos son las mismas, quiero agregar las cantidades de los productos y tomar el total con la identificación del producto, la identificación de la categoría y la cantidad total.
Como ejemplo si
product_id = [4,5,1,3,5]; product_category_id =[2,2,1,3,2]; product_amount =[3000,4000,5000,5000,4000];y aquí lo que quiero como salida es
product_id || product_category_id || product_new_amount 4 2 3000 5 2 8000 1 1 5000 3 3 5000Hay muchas maneras de lograr su objetivo, dependiendo de cómo desee utilizar los datos. Si las matrices siempre tienen la misma longitud, esencialmente lo que debe hacer es crear una nueva matriz de objetos, comprobando si la combinación product_id y product_category_id ya se ha agregado. Si es así, agrega la cantidad del producto a esa entrada, y si no, crea una nueva entrada a los datos.
Una vez que los datos están organizados en una matriz, puede hacer lo que quiera con ellos. Llené una tabla con los datos como una demostración simple.
espero que esto lo dirija en la dirección correcta 👍 si tiene alguna pregunta sobre mi código, por favor pregunte.
const product_id = [4,5,1,3,5]; const product_category_id = [2,2,1,3,2]; const product_amount = [3000,4000,5000,5000,4000]; const productData = []; //format data for (let i = 0; i < product_id.length; i++) { const pid = product_id[i]; const pcid = product_category_id[i]; const prodAmt = product_amount[i]; const target = productData.find(data => data.pid == pid && data.pcid == pcid); if (target) target.prodAmt += prodAmt; else productData.push({pid, pcid, prodAmt}); } //create rows const table = document.querySelector("table"); for (const data of productData) { const tr = document.createElement("tr"); const values = Object.values(data); for (const value of values) { const td = document.createElement("td"); td.innerText = value; tr.appendChild(td); } table.appendChild(tr); } <table> <tr> <th>product_id</th> <th>product_category_id</th> <th>product_new_amount</th> </tr> </table>Esta solución puede ayudarte. Por favor, prueba esto:
const product_id = [4,5,1,3,5]; const product_category_id =[2,2,1,3,2]; const product_amount =[3000,4000,5000,5000,4000]; function find_duplicate_in_array(array){ const count = {}; const category_id = {}; const amount = {}; const result = []; array.forEach((item,index) => { if (count[item]) { count[item] +=1; amount[item] += product_amount[index]; return } count[item] = 1; amount[item] = product_amount[index]; category_id[item] = product_category_id[index]; }); for(let prop in count){ result.push({product_id:prop,product_category_id:category_id[prop],product_new_amount:amount[prop]}) } console.log('result---->', result); return result; } find_duplicate_in_array(product_id);Primero, haga objetos a partir de sus arreglos.
product_id = [4,5,1,3,5]; product_category_id =[2,2,1,3,2]; product_amount =[3000,4000,5000,5000,4000]; function Item(i,ci,a) { this.id=i; this.category_id=ci; this.amount=a; } obj=[]; product_id.forEach((v,k)=>{obj.push(new Item(product_id[k],product_category_id[k],product_amount[k]))}); document.write(JSON.stringify(obj),'<br>'); document.write('<br>'); A continuación, cree dos Map , uno para el emparejamiento id:amount y el otro para la relación id:category .
Ejecute las cantidades y, si la clave ya existe, agréguele el nuevo valor. De lo contrario, actualice ambos Map con la nueva clave y el valor respectivo.
m=new Map(); m2=new Map(); obj.forEach(o=>{ if (m.has(o.id)) m.set(o.id,m.get(o.id)+o.amount); else { m.set(o.id,o.amount); m2.set(o.id,o.category_id); } }); Finalmente, visualice los datos, teniendo cuidado de utilizar el Map correcto.
m.forEach((v,k)=>document.write(k+', '+m2.get(k)+', '+v,'<br>'));Ponlo junto:
product_id = [4,5,1,3,5]; product_category_id =[2,2,1,3,2]; product_amount =[3000,4000,5000,5000,4000]; function Item(i,ci,a) { this.id=i; this.category_id=ci; this.amount=a; } obj=[]; product_id.forEach((v,k)=>{obj.push(new Item(product_id[k],product_category_id[k],product_amount[k]))}); document.write(JSON.stringify(obj),'<br>'); document.write('<br>'); m=new Map(); m2=new Map(); obj.forEach(o=>{ if (m.has(o.id)) m.set(o.id,m.get(o.id)+o.amount); else { m.set(o.id,o.amount); m2.set(o.id,o.category_id); } }); m.forEach((v,k)=>document.write(k+', '+m2.get(k)+', '+v,'<br>'));