Advertencia: soy nuevo en la codificación, así que tenga paciencia conmigo.
Estoy tratando de recorrer la matriz "diario" y la función "cuántos" solo devuelve 2 elementos 'Inicio', cuando hay 4 elementos de 'Inicio' en general en la matriz "diario".
¿Qué estoy haciendo mal? Gracias. :)
Está utilizando el método includes que solo devuelve el valor booleano. Si coincide, incluso si tiene 4 coincidencias, el number solo se incrementará en 1 por cada ciclo.
Esta es otra forma de lograrlo usando filter .
let diary = []; const addEntry = (events) => { diary.push({ events }); }; addEntry(['Home', 'Work', 'Park', 'Beach', 'Home']); addEntry(['Work', 'Home', 'Store', 'Gas Station', 'Home']); const howMany = (event, journal) => { let number = 0; for (let i = 0; i < journal.length; i++) { let entry = journal[i]; number += entry.events.filter((e) => e === event).length; } console.log(`You did that ${number} time(s)`); }; howMany('Home', diary); console.log(diary);https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
reduce y filter . let diary = []; const addEntry = (events) => { diary.push({ events }); }; addEntry(['Home', 'Work', 'Park', 'Beach', 'Home']); addEntry(['Work', 'Home', 'Store', 'Gas Station', 'Home']); const howMany = (event, journal) => journal.reduce( (acc, curr) => acc + curr.events.filter((e) => e === event).length, 0 ); const number = howMany('Home', diary); console.log(`You did that ${number} time(s)`); console.log(diary);lo siento por la respuesta anterior, no revisé el código, este es el correcto
let diary = []; const addEntry = (event) => { diary.push(event); }; addEntry(['Home', 'Work', 'Park', 'Beach', 'Home']); addEntry(['Work', 'Home', 'Store', 'Gas Station', 'Home']); const howMany = (event, journal) => { let number = 0; for (let i = 0; i < journal.length; i++) { for(let j =0;j < journal.length;j++) { const entries = journal[i][j] if(event.includes(event)){ number++ } } } console.log(`You did that ${number} time(s)`); }; howMany('Home', diary); console.log(diary);La razón por la que devuelve solo dos es porque el método includes() no contará cuántas veces ocurre, sino que solo devuelve valores booleanos. Y su código solo cuenta cuántas declaraciones true se producen. En su caso, debido a que la longitud de la matriz es 2 y cada elemento tiene 'Inicio', su código solo devuelve 2.
Hay varias formas de lograr lo que desea, pero lo que hago a continuación es usar múltiples foreach (o también puede usar for loop) como verificar la matriz 2d.
let diary = [] const addEntry = events =>{ diary.push({events}) } addEntry(['Home', 'Work', 'Park', 'Beach', 'Home']) addEntry(['Work', 'Home', 'Store', 'Gas Station', 'Home']) const howMany = (event, journal) => { let number = 0; journal.forEach(element => { element.events.forEach(item => { if (item === event) { number++ } }) }); console.log(`You did that ${number} time(s)`); } howMany('Home', diary) console.log(diary)* Lo siento si mi inglés es bastante malo.