Подсчитывайте значения в объекте без прототипа, чтобы ключи вроде proto не конфликтовали со служебными свойствами. Для чисел из примера получится {'1': 1, '2': 2, '3': 3}.
Определение частоты появления элементов в массиве
Подсчитывайте значения в объекте без прототипа, чтобы ключи вроде __proto__ не конфликтовали со служебными свойствами. Для чисел из примера получится {'1': 1, '2': 2, '3': 3}.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализовать функцию countOccurrences, которая возвращает объект с числом появлений каждого значения из переданного массива.
function countOccurrences(inputArray) {}
console.log(countOccurrences([1, 2, 2, 3, 3, 3])); // [ 1: 1, 2: 2, 3: 3 ]
Ответ
Подсчитывайте значения в объекте без прототипа, чтобы ключи вроде proto не конфликтовали со служебными свойствами. Для чисел из примера получится {'1': 1, '2': 2, '3': 3}.
function countOccurrences(inputArray) {
const counts = Object.create(null);
for (const value of inputArray) {
const key = String(value);
counts[key] = (counts[key] ?? 0) + 1;
}
return counts;
}
В условии результат записан квадратными скобками, но именованные счётчики здесь образуют объект, не массив. Строковое преобразование объединяет число 1 и строку '1'; разные обычные объекты также могут дать одинаковый ключ. Если требуется различать типы и ссылки, вместо объекта используйте Map.