"id": 1,
"category": "breakfast",
"title": "eggs",
"ingridients": [
"eggs",
"salt",
"tomatoes"
],
"time": 15,
"difficulty": 2
},
{
"id": 2,
"category": "breakfast",
"title": "porridge",
"ingridients": [
"oats",
"salt",
"sugar"
],
"time": 20,
"difficulty": 2
},
{
"id": 2,
"category": "dessert",
"title": "cake",
"ingridients": [],
"time": 40,
"difficulty": 4
}
]
При помощи редюс хочу получить вот это:
[
{id: 0, category: breakfast, total: 2},
{id: 1, category: dessert, total: 1},
]
Кто-то может подсказать?
Так у тебя же там нет id с нулём
Можно и без айди
Блин редьюсом сложно на самом деле т.к. у него же типа вычисляется одно значение на основе всего массива, а тут их два вон тотала
Будет проще и эффективнее сначала получиьь map где ключ будет id а значение - накопленный объект
Object.entries(src.reduce((acc, { category }) => (acc[category] = (acc[category] || 0) + 1, acc), {})).map(([category, total]) => ({ category, total })) 🌚
Только перепиши нормально xD
Ещё варик: Object.values(data.reduce((acc, item) => { if (acc[item.category]) { acc[item.category]["total"] += 1; } else { acc[item.category] = { category: item.category, total: 1 }; } return acc; }, {})); без map
Чуть короче. Object.values(data.reduce((acc, { category }) => { acc[category] ??= { category, total: 0 } acc[category].total += 1 return acc }, {}))
свой вариант тоже напишу foods.reduce((acc, { category: cur }) => ~acc.map(({ category }) => category).indexOf(cur) ? [...acc] : [...acc, { category: cur, total: foods.filter(({ category }) => category === cur).length }] , [])
кто юзает спред в редусе у того высок риск смерти
Это правда Квадрат в итоге получается, когда его можно избежать
да он ещё и map юзает и indexOf и filter ☠☠☠☠
куб получается
const extractCategories = (dishes) => { const categoriesMap = dishes.reduce((acc, { category }) => { const data = acc.get(category) ?? { id: acc.size, category, total: 0 }; data.total++; return acc.set(category, data); }, new Map()); return [...categoriesMap.values()]; }; поучаствую в конкурсе
вот это я понимаю
Обсуждают сегодня