Necesito un poco de ayuda para obtener el conteo doble y el precio total para cada persona. mi objeto
const obj = [ {'name':'sven','price':'10'}, {'name':'jan','price':'12'}, {'name':'john','price':'5'}, {'name':'nick','price':'13'}, {'name':'sven','price':'11'}, {'name':'jan','price':'7'}, {'name':'nick','price':'9'}, ];Desde este objeto estoy contando el doble desde la clave 'nombre'. por ejemplo, sven 2, 1 de enero, john 1, nick 2. Uso este código para eso
const counts = []; obj.map((x)=>{ counts[x[0]] = (counts[x[0]] || 0) + 1; });Ahora también necesito el recuento total de ahorros clave de 'precio' junto con cada persona y parece que no puedo encontrar una manera de hacerlo.
el resultado debe ser una matriz de objetos, por ejemplo
counts = [ {'person':'sven','count':'2','totalPrice':'21'}, {'person':'jan','count':'2','totalPrice':'19'} ]Sé cómo obtener el doble y sé cómo contar el total, pero no en el mismo ciclo y guardar como 1 objeto. Si alguien pudiera ayudarme un poco señalando la dirección correcta, por favor.
Aquí hay una solución Array.reduce que verifica si la matriz contiene un elemento con la misma propiedad de name y, de ser así, incrementa su propiedad totalPrice por la propiedad de price del elemento y su propiedad de count en 1.
const arr = [ {'name':'sven','price':'10'}, {'name':'jan','price':'12'}, {'name':'john','price':'5'}, {'name':'nick','price':'13'}, {'name':'sven','price':'11'}, {'name':'jan','price':'7'}, {'name':'nick','price':'9'}, ]; const result = arr.reduce((a, b) => { const found = a.find(e => e.name == b.name); if(found){ found.totalPrice += +b.price; found.count++; }else{ a.push({name:b.name, totalPrice: +b.price, count: 1}) } return a }, []) console.log(result)