Les comparto mi código con mis notas:
/**
* Reto: find, filter y reduce
*
* En este reto practicarás los tres métodos de orden superior más importantes
* para trabajar con arreglos: find, filter y reduce.
*
* Conceptos clave:
* - find: retorna el PRIMER elemento que cumple la condición (o undefined)
* - filter: retorna TODOS los elementos que cumplen la condición (array vacío si no hay)
* - reduce: acumula un resultado final recorriendo todo el array
*/
/**
* Ejercicio 1: buscarNotaPorId
*
* Usa find para retornar la nota que tenga el id especificado.
* Si no existe, retorna undefined.
*
* @param {Array} notas - Arreglo de objetos nota con propiedades: id, title, content, category
* @param {number} id - El id a buscar
* @returns {Object|undefined} La nota encontrada o undefined
*/
function buscarNotaPorId(notas, id) {
// Tu código aquí
return notas.find((nota)=>nota.id===id);
}
const notas=[
{id:1,title:'título1',content:'contenido1',category:'categoría1'},
{id:2,title:'título2',content:'contenido2',category:'categoría2'}
]
console.log(buscarNotaPorId(notas,2));
console.log(buscarNotaPorId(notas,3));
/**
* Ejercicio 2: buscarNotaPorTituloExacto
*
* Usa find para retornar la nota cuyo título coincida exactamente (===)
* con el título buscado. La comparación debe ser sensible a mayúsculas/minúsculas.
*
* @param {Array} notas - Arreglo de notas
* @param {string} titulo - El título exacto a buscar
* @returns {Object|undefined} La nota encontrada o undefined
*/
function buscarNotaPorTituloExacto(notas, titulo) {
// Tu código aquí
return notas.find((nota)=>nota.title===titulo);
}
const notas2=[
{id:1,title:'título1',content:'contenido1',category:'categoría1'},
{id:2,title:'título2',content:'contenido2',category:'categoría2'}
]
console.log(buscarNotaPorTituloExacto(notas2,'título2'));
/**
* Ejercicio 3: filtrarNotasPorCategoria
*
* Usa filter para retornar todas las notas que pertenezcan
* a la categoría especificada.
*
* @param {Array} notas - Arreglo de notas
* @param {string} categoria - La categoría a filtrar
* @returns {Array} Arreglo con las notas de esa categoría (vacío si no hay)
*/
function filtrarNotasPorCategoria(notas, categoria) {
// Tu código aquí
return notas.filter((nota)=>nota.category.toLowerCase().includes(categoria));
}
const notas3=[
{id:1,title:'título1',content:'contenido1',category:'categoría1'},
{id:2,title:'título2',content:'contenido2',category:'categoría2'}
]
console.log(filtrarNotasPorCategoria(notas3,'categoría1'));
/**
* Ejercicio 4: filtrarNotasPorLongitudMinima
*
* Usa filter para retornar todas las notas cuyo content tenga
* una longitud mayor o igual a la especificada.
*
* @param {Array} notas - Arreglo de notas
* @param {number} longitudMinima - Cantidad mínima de caracteres
* @returns {Array} Notas que cumplan la condición
*/
function filtrarNotasPorLongitudMinima(notas, longitudMinima) {
// Tu código aquí
return notas.filter((nota)=>{
return nota.longitud >longitudMinima;
})
}
const notas4=[
{id:1,title:'título1',content:'contenido1',category:'categoría1',longitud:10},
{id:2,title:'título2',content:'contenido2',category:'categoría2',longitud:20}
]
console.log(filtrarNotasPorLongitudMinima(notas4,15));
/**
* Ejercicio 5: sumarIds
*
* Usa reduce para sumar todos los id de las notas.
* El valor inicial del acumulador debe ser 0.
*
* @param {Array} notas - Arreglo de notas
* @returns {number} La suma de todos los ids
*/
function sumarIds(notas) {
// Tu código aquí
return notas.reduce((acc,n)=>acc+n,0)
}
const notas5=[10,8,7,9,10];
console.log(sumarIds(notas5));
/**
* Ejercicio 6: concatenarTitulos
*
* Usa reduce para concatenar todos los títulos de las notas
* separados por un guión (-). El valor inicial debe ser string vacío "".
*
* Ejemplo: [{title: "A"}, {title: "B"}] → "A-B"
*
* @param {Array} notas - Arreglo de notas
* @returns {string} String con los títulos concatenados
*/
function concatenarTitulos(notas) {
// Tu código aquí
return notas.reduce((acc,n)=>acc + (acc ? '-' : '') + n.title,'');
}
const titulos=[{title: "A"}, {title: "B"}, {title: "C"}];
console.log(concatenarTitulos(titulos));
/**
* Ejercicio 7: contarNotasPorCategoria (Reto avanzado)
*
* Usa reduce para contar cuántas notas existen por cada categoría.
* El acumulador debe ser un objeto vacío {}.
*
* Ejemplo de resultado: { trabajo: 2, personal: 1, estudio: 3 }
*
* Tip: En cada iteración, usa la categoría de la nota como clave del objeto.
* Si la clave no existe, inicialízala en 0, luego incrementa.
*
* @param {Array} notas - Arreglo de notas
* @returns {Object} Objeto con categorías como claves y conteos como valores
*/
function contarNotasPorCategoria(notas) {
// Tu código aquí
return notas.reduce((acc,nota)=>{
const categoria=nota.categoria;
acc[categoria] = (acc[categoria] || 0) + 1;
//se usa acc[categoria] en vez de acc.categoria porque si escribes acc.categoria,
// JavaScript buscará literalmente una propiedad llamada "categoria" dentro del
// objeto acc. Como no se quiere usar la propiedad fija, sino el valor de esa variable
// como el nombre de la propiedad
//es como decirle: "No busques la palabra 'categoria', evalúa lo que hay dentro y usa eso como clave".
//Al usar acc.categoria, estarías tratando de reescribir una y otra vez la misma propiedad, perdiendo toda la información anterior.
// Con acc[categoria], estás clasificando. Estás creando nuevas propiedades en tu objeto dinámicamente según el valor que traiga cada nota.
// Es la diferencia entre tener un solo archivador que siempre borras, o tener un archivero donde vas creando carpetas nuevas según las necesitas.
return acc;
},{});
}
const notas6 = [
{ id: 1, categoria: 'trabajo', texto: 'Reunión' },
{ id: 2, categoria: 'estudio', texto: 'JS' },
{ id: 3, categoria: 'trabajo', texto: 'Email' },
{ id: 4, categoria: 'personal', texto: 'Comprar pan' },
{ id: 5, categoria: 'estudio', texto: 'React' },
{ id: 6, categoria: 'estudio', texto: 'Node' }
];
console.log(contarNotasPorCategoria(notas6));
/**
* Ejercicio 8: calcularPromedioDeIds
*
* Usa reduce para calcular el promedio de todos los ids.
* Primero suma todos los ids, luego divide por la cantidad de notas.
*
* @param {Array} notas - Arreglo de notas
* @returns {number} El promedio de los ids
*/
function calcularPromedioDeIds(notas) {
// Tu código aquí
const suma= notas.reduce((acc,n)=>
acc+n, 0);
return suma/notas.length;
}
const notas7=[10,8,7,9,10];
console.log(calcularPromedioDeIds(notas7));
module.exports = {
buscarNotaPorId,
buscarNotaPorTituloExacto,
filtrarNotasPorCategoria,
filtrarNotasPorLongitudMinima,
sumarIds,
concatenarTitulos,
contarNotasPorCategoria,
calcularPromedioDeIds,
};


