Skip to content

Instantly share code, notes, and snippets.

@devCharles
Created June 18, 2020 07:34
Show Gist options
  • Save devCharles/ab2c05a16a2ee9af2963652c37bba279 to your computer and use it in GitHub Desktop.
Save devCharles/ab2c05a16a2ee9af2963652c37bba279 to your computer and use it in GitHub Desktop.
hastables
const productosComprados = [
{ name: 'arroz', precio: 1, unidad: '1kg' },
{ name: 'frijoles', precio:6, unidad: '2kg' },
{ name: 'coca', precio: 3, unidad: '500ml' },
{ name: 'frijoles', precio: 6, unidad: '2kg' },
{ name: 'coca', precio: 3, unidad: '500ml' },
{ name: 'frijoles', precio: 6, unidad: '2kg' },
{ name: 'chocolate', precio: 7, unidad: 'barra'}
]
/*
name conteo
arroz 1
frijoles 3
coca 2
{
arroz: 1,
frijoles: 3,
coca: 2
}
*/
// hashtables
const productosUnicos = productosComprados.reduce((hash, producto) => {
const { name } = producto // frijoles
const conteo = hash[name] // { arroz: 1, frijoles: 1, coca: 1 } .frijoles => 1 + 1 = 2
? hash[name] + 1 // hash.frijoles + 1
: 1
return {
...hash,
[name]: conteo
} // { arroz: 1, frijoles: 2, coca: 1 } [ ['arroz', 1], [ 'frijoles', 2 ] ]
}, {})
const orden = Object.entries(productosUnicos).map(([key, conteo]) => {
const [ key, conteo ] = item
const itemData = productosComprados.find(p => p.name === key)
return {
name: key,
conteo,
total: conteo * itemData.precio,
...itemData
}
})
const total = orden.reduce((suma, item) => suma + item.total, 0)
console.log('productosUnicos: ', productosUnicos)
console.log('orden: ', orden )
console.log('total: ', total )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment