What am I trying to do:
Given an array of numbers, for example: ["1", "2", "1", "1", "2", "2", "3"]
,
I want to find the element that is most repeated in the array.
But, I also want to know if there is more than 1 element that satisfies the requirement, and what are those elements.
I couldn't think of any idea on how to start with this yet...
Object
and Array
. Also, what you’re looking for is called the mode. This is an approach using Array.reduce()
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce
{"1": 3, "2": 3, "3": 1}
{"count": 3, "values": ["1", "2"]}
const data = ["1", "2", "1", "1", "2", "2", "3"];
//returns the number of time each unique value occurs in the array
const counts = data.reduce( (counts, item) => {
if(item in counts)
counts[item] += 1;
else
counts[item] = 1;
return counts;
}, {});
console.log(counts);
/*
{
"1": 3,
"2": 3,
"3": 1
}
*/
//returns which values and how many times occur the most
const max = Object.entries(counts)
.reduce((max, [value, count])=> {
if(count < max.count)
return max;
if(count == max.count){
max.values.push(value);
return max;
}
return {count: count, values: [value]};
},{count: 0, values: []});
console.log(max);
/*
{
"count": 3,
"values": [
"1",
"2"
]
}
*/