Reputation: 31
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.
What am I doing wrong? Thank you. :)
Upvotes: 0
Views: 921
Reputation: 2005
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
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);
Upvotes: 2
Reputation: 59
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);
Upvotes: 1
Reputation: 34
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.
Upvotes: 0