Вы можете указать, хотите ли вы сохранить все результаты или только те, которые вам нужны, передав объект fruits
в функцию frequency
в качестве второго необязательного параметра.
Сборка frequency
карта частот всех найденных фруктов.
Если вы хотите по-настоящему оптимизировать, спросите на сайте Code Review Stack Exchange .
let basket = ['Apples', 'Oranges', 'Bananas', 'Potatoes', 'Cucumber']
let fruits = { Apples: 0, Bananas: 0, Oranges: 0 }
console.log(frequency(basket, fruits)) // only the ones request
console.log(frequency(basket)) // all fruits
function frequency(items, initial) {
return items.reduce((freq, item, index) => {
return initial == null || (initial != null && initial[item] != null)
? Object.assign(freq, { [item] : (freq[item] || 0) + 1 })
: freq
}, Object.assign({}, initial))
}
.as-console-wrapper {
top: 0;
max-height: 100% !important;
}
Обратная связь
Что касается вашего предполагаемого вопроса, вы можете посмотреть на это двумя способами.
- Перебирая все элементы в корзине и увеличивая количество фруктов
Это должно пройти весь путь через корзину, но это эффективно, потому что это O (n) + O (1 ).
basket.forEach(fruit => {
if (fruits[fruit] !== undefined) {
fruits[fruit]++
}
})
console.log(fruits)
Перебирая фрукты и проверяя, есть ли они в корзине.
Это ваше желаемое поведение, потому что вы проверяете только те фрукты, о которых хотите знать, и количество фруктов никогда не увеличивается выше 1.
Object.keys(fruits).forEach(fruit => {
if (basket.includes(fruit)) {
fruits[fruit]++;
}
})
console.log(fruits);