DEV Community

Cristian Fernando
Cristian Fernando

Posted on

Advent.js🎅🏼| #7: Buscando en el almacen...

Buscando en el almacen...

Mi amigo Dani está trabajando en una tienda y con la llegada de las navidades tiene el almacén hecho un desastre y no encuentra nada.

Vamos a crear una función contains que recibe dos parámetros: un objeto que define el almacén y el producto que buscamos.

La función debe devolver un booleano que indique si se encuentra el string como valor en algún nivel del objeto. Veamos unos ejemplos:

const almacen = {
  'estanteria1': {
    'cajon1': {
      'producto1': 'coca-cola',
      'producto2': 'fanta',
      'producto3': 'sprite'
    }
  },
  'estanteria2': {
    'cajon1': 'vacio',
    'cajon2': {
      'producto1': 'pantalones',
      'producto2': 'camiseta' // <- ¡Está aquí!
    }
  }
}

contains(almacen, 'camiseta') // true

const otroAlmacen = {
  'baul': {
    'fondo': {
      'objeto': 'cd-rom',
      'otro-objeto': 'disquette',
      'otra-cosa': 'mando'
    }
  }
}

contains(otroAlmacen, 'gameboy') // false
Enter fullscreen mode Exit fullscreen mode

Ten en cuenta que la tienda es enorme. Tiene diferentes almacenes y, como has visto en los ejemplos, cada uno puede tener diferentes organizaciones. Lo importante es buscar que el producto está en los almacénes.

Completa el reto!


Mi solución:


Puedes seguir a @midudev y estar pendiente de los retos de Advent.js

Top comments (6)

Collapse
 
cjsq24 profile image
Carlos Sosa Q.

Ha pasado un tiempo, no estuve al tanto pero acá ando entrenando en algoritmos. Esta es mi solución:

const contains = (store, products) => {
  return Object.entries(store).some(([_key, value]) =>
    typeof value === "object"
       ? contains(value, products)
       : value === products
  );
};
Enter fullscreen mode Exit fullscreen mode
Collapse
 
alexaguilarp profile image
Alex

buena solución, yo estuve probando y pude hacerlo de 2 formas

Collapse
 
alexaguilarp profile image
Alex

aunque esta es hacer trampa creo yo
export default function contains(store, product) {
// ¡Y no olvides compartir tu solución en redes!
let contenido = JSON.stringify(store);
console.log(contenido);
let buscar = ':"' + product + '"';
let valor = contenido.includes(buscar);
if (valor) {
return true;
} else {
return false;
}
}

Collapse
 
cjsq24 profile image
Carlos Sosa Q. • Edited

Esta solución me dejó sin dentadura jajaja, porque de todas maneras al final lo que importa es saber si el valor existe, más nada.

Al final así quedaría más simplificado:

const contains = (store, product) => {
  return JSON.stringify(store).includes(`:"${product}"`);
};
Enter fullscreen mode Exit fullscreen mode
Collapse
 
alexaguilarp profile image
Alex • Edited

y esta creo que es la mejor opción que logre hacer
export default function contains(store, product) {
// ¡Y no olvides compartir tu solución en redes!
let contenido = convertirArray(store)
console.log(contenido)
let buscar = contenido.find( element => element == product)
if (buscar){
return true
}else{
return false
}

}
function convertirArray(obj) {
let resultado = [];
for (const prop in obj) {
const valor = obj[prop];
if (typeof valor === 'object') {
resultado = resultado.concat(convertirArray(valor))
}
else {
resultado.push(valor);
}

}
return resultado;
}

Collapse
 
bsquiroz profile image
brayan stiven muñoz quiroz

super, esa función recursiva, una maravilla