Как оптимизировать перебор массива с поиском повторяющихся элементов
Есть начальный массив из 5 чисел, нужно найти в нем совпадающее число и вывести, если совпадающих чисел больше одного, то вывести число с максимальным количеством совпадений. Вариант когда количество совпадений у двух чисел одинаковое можно не рассматривать.
Написал вот такой код, он не универсальный, но с решением данной задачи справляется. Однако мне кажется, что он не самый оптимальный и можно сократить количество условий и придать какой-то универсальности. Может есть какие-то предложения?
let answers = [2, 3, 3, 2, 3]
let sortAnswers = answers.sort((a, b) => a - b)
let number = null
let result = {
number: [],
score: []
}
for (let i = 0; i < sortAnswers.length; i++) {
if (sortAnswers[i] === number) {
if (result.number.length) {
if (result.number[0] === sortAnswers[i]) {
result.score[0]++
} else if (result.number.length > 1 && result.number[1] === sortAnswers[i]) {
result.score[1]++
} else {
result.number.push(sortAnswers[i])
result.score.push(1)
}
} else {
result.number.push(sortAnswers[i])
result.score.push(1)
}
}
number = sortAnswers[i]
}
console.log(sortAnswers, result)
Ответы (1 шт):
Автор решения: Lukas
→ Ссылка
const maxNumberRepeat = (arr) => {
let numObj = arr.reduce((acc,i) => {
acc[i] ? acc[i]++ : acc[i]=1;
return acc;
},{}) // собираем объект в котором считаем количество цифр.
const maxNumber = Math.max(...Object.values(numObj)); // находим максимальное повторения числа.
return +Object.keys(numObj).find(key => numObj[key] === maxNumber); // возвращаем само число.
}
console.log(maxNumberRepeat([2, 3, 3, 2, 3]))
console.log(maxNumberRepeat([4, 2, 4, 2, 3, 2, 4, 3, 4, 1 , 6 , 7, 4, 2]))