Я написал это решение, которое работает, хотя я хотел бы проверить с сообществом, есть ли лучший способ добавить пару (ключ, значение) в ha sh, пока я повторяю . Мне нужно создать новую функцию с именем addPairToHashAndReturnIt
в качестве вспомогательной функции.
Задача заключается в следующем:
Создайте функцию countBy
, которая принимает массив и обратный вызов и возвращает объект. countBy будет перебирать массив и выполнять обратный вызов для каждого элемента. Каждое возвращаемое значение из обратного вызова будет сохранено как ключ объекта. Значением, связанным с каждым ключом, будет количество возвращаемых возвращаемых значений.
function countBy(array, callback) {
return array.reduce(
(acc, each) =>
(!acc[callback(each)] && addPairToHashAndReturnIt(acc, callback(each), each)) ||
((acc[callback(each)] += 1) && acc),
{}
);
}
const addPairToHashAndReturnIt = (hash, key, value) => {
hash[key] = 1;
return hash;
};
function evenOrOddNumber(num) {
if (num % 2 === 0) return 'even';
else return 'odd';
};
console.log(
countBy([1, 2, 3, 4, 5], evenOrOddNumber)
); // should log: { odd: 3, even: 2 }
Итак, что вы думаете об этом решении?