00:00
javascript · arrays · métodos puros

Gestor de
Inventario

Challenge técnico en cuatro pasos con dificultad incremental. Cada ejercicio trabaja sobre el mismo dataset con métodos nativos de JavaScript.

● nivel 1 — fácil

Filtrar productos
disponibles

01

Tenés un arreglo de productos. Cada uno tiene nombre, precio y stock.

Usá Array.filter para obtener solo los productos que tienen stock > 0. Guardá el resultado en una variable llamada disponibles.

Array.filter() arrow functions dot notation
paso-1.js
const productos = [
  { nombre: "Manzana",  precio: 150, stock: 30 },
  { nombre: "Banana",   precio:  90, stock:  0 },
  { nombre: "Naranja",  precio: 120, stock: 15 },
  { nombre: "Pera",     precio: 200, stock:  0 },
  { nombre: "Uva",      precio: 350, stock:  8 },
];
array.filter(item => condición) devuelve un nuevo arreglo solo con los elementos donde la condición es true. Para acceder a una propiedad usá item.stock.

Estructura: const disponibles = productos.filter(p => p.stock > 0)
editorjavascript
● nivel 2 — medio

Generar etiquetas
de precio

02

Con el mismo arreglo de productos, usá Array.map para generar un nuevo arreglo de strings con este formato:

"Manzana — $150"

El resultado debe tener un string por cada producto. Guardalo en etiquetas.

Array.map() template literals string interpolation
paso-2.js
const productos = [
  { nombre: "Manzana",  precio: 150, stock: 30 },
  { nombre: "Banana",   precio:  90, stock:  0 },
  { nombre: "Naranja",  precio: 120, stock: 15 },
  { nombre: "Pera",     precio: 200, stock:  0 },
  { nombre: "Uva",      precio: 350, stock:  8 },
];
array.map(item => expresión) transforma cada elemento y devuelve un nuevo arreglo del mismo tamaño.

Usá template literals con backticks: `${item.nombre} — $${item.precio}`
editorjavascript
● nivel 3 — difícil

Agrupar por
categoría

03

Los productos ahora tienen una propiedad categoria. Usá Array.reduce para construir un diccionario donde cada clave sea una categoría y el valor sea un arreglo con los nombres de los productos de esa categoría.

Guardá el resultado en agrupados.

Array.reduce() object accumulator dynamic keys
paso-3.js
const productos = [
  { nombre: "Manzana",   categoria: "fruta",   precio: 150 },
  { nombre: "Banana",    categoria: "fruta",   precio:  90 },
  { nombre: "Zanahoria", categoria: "verdura", precio:  80 },
  { nombre: "Lechuga",   categoria: "verdura", precio:  60 },
  { nombre: "Uva",       categoria: "fruta",   precio: 350 },
  { nombre: "Papa",      categoria: "verdura", precio:  50 },
];
reduce((acum, item) => { ... }, {}) empieza con un objeto vacío como acumulador.

Si la clave no existe todavía: acum[item.categoria] = acum[item.categoria] || []
Luego: acum[item.categoria].push(item.nombre)
Al final no olvides: return acum
editorjavascript
● nivel 4 — desafío

Pipeline
completo

04

Combiná todo en un solo pipeline encadenado, sin variables intermedias. A partir del arreglo:

  1. Filtrá los que tienen stock > 0
  2. Filtrá los que tienen precio <= 200
  3. Transformalos a { nombre, total: precio * stock }
  4. Ordenalos de mayor a menor por total

Guardá el resultado en resultado.

Array.filter() Array.map() Array.sort() method chaining
paso-4.js
const productos = [
  { nombre: "Manzana",   precio: 150, stock: 30 },
  { nombre: "Banana",    precio:  90, stock:  0 },
  { nombre: "Naranja",   precio: 120, stock: 15 },
  { nombre: "Pera",      precio: 200, stock: 12 },
  { nombre: "Uva",       precio: 350, stock:  8 },
  { nombre: "Mandarina", precio: 100, stock: 25 },
];
Podés encadenar directamente: productos.filter(...).filter(...).map(...).sort(...)

Para ordenar de mayor a menor: .sort((a, b) => b.total - a.total)
editorjavascript
Challenge completado.

Los cuatro pasos fueron resueltos correctamente.

Tiempo total
minutos : segundos
Puntaje
pasos resueltos