Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
Looping through array of objects is only returning one object of elements instead of two. What am I doing wrong?

Forewarning I am new to coding so be patient with me.

I'm trying to loop through the "diary" array & the function "howMany" is only returning 2 'Home' elements, when there are 4 elements of 'Home' overall in the "diary" array.

Code in question

What am I doing wrong? Thank you. :)

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

You're using the includes method which only returns the boolean. If it's matched, even got 4 matches, the number only will be increased by 1 for each loop.

This is another way to achieve that by using 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


Update: Using reduce & 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);
about 4 years ago · Juan Pablo Isaza Denunciar

0

sorry for earlier answer i didnt review the code this is the correct one

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);

about 4 years ago · Juan Pablo Isaza Denunciar

0

The reason why it returning only two is because includes() method will not count on how many occurrence of it occur, but only return boolean. And your code only count how many true statement is occur. In your case, because the array length is 2 and every element happens to have 'Home', your code only returning 2.

There are multiple way to achieve what you want but what I do below is to use multiple foreach (or you can use for loop as well) kinda like checking 2d array.

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)

*sorry if my english is pretty bad.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda