I have 3 people in the house ['John', 'Jane', 'Jack'],
We kept track of who opened/closed the door.
logs = [
{ name: "John", status: "opened" },
{ name: "Jane", status: "opened" },
{ name: "Jack", status: "opened" },
{ name: "Jane", status: "closed" },
{ name: "Jack", status: "closed" },
];
As you can see only 2 people ['Jane', 'Jack'] that opened and closed the door properly.
programmatically, I did these 3 steps to come to know that John is the person who opened and never closed the door.
let openers = logs.reduce((acc, log) => {
if (log.status === "opened") {
acc.push(log.name);
}
return acc;
}, []);
console.log(openers);
let closers = logs.reduce((acc, log) => {
if (log.status === "closed") {
acc.push(log.name);
}
return acc;
}, []);
console.log(closers);
let result = [];
closers.forEach((closer) => {
if (openers.includes(closer)) {
result.push(closer);
}
});
console.log(result);
I was trying to do these in one go in a single reduce(), but I'm not too sure.
Can someone help me improve what I got
logs = [
{ name: "John", status: "opened" },
{ name: "Jane", status: "opened" },
{ name: "Jack", status: "opened" },
{ name: "Jane", status: "closed" },
{ name: "Jack", status: "closed" },
];
let openers = logs.reduce((acc, log) => {
if (log.status === "opened") {
acc.push(log.name);
}
return acc;
}, []);
console.log(openers);
let closers = logs.reduce((acc, log) => {
if (log.status === "closed") {
acc.push(log.name);
}
return acc;
}, []);
console.log(closers);
let result = [];
closers.forEach((closer) => {
if (openers.includes(closer)) {
result.push(closer);
}
});
console.log(result);
?