169 похожих чатов

У меня есть массив: [ {

"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},
]

Кто-то может подсказать?

16 ответов

18 просмотров

Так у тебя же там нет id с нулём

Vlad- Автор вопроса

Блин редьюсом сложно на самом деле т.к. у него же типа вычисляется одно значение на основе всего массива, а тут их два вон тотала

Будет проще и эффективнее сначала получиьь map где ключ будет id а значение - накопленный объект

Object.entries(src.reduce((acc, { category }) => (acc[category] = (acc[category] || 0) + 1, acc), {})).map(([category, total]) => ({ category, total })) 🌚

Vlad- Автор вопроса
Vlad
Cпасибо👍

Только перепиши нормально xD

Vlad
Cпасибо👍

Ещё варик: 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, item) =...

Чуть короче. 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 }] , [])

modernpunk
свой вариант тоже напишу foods.reduce((acc, { cat...

кто юзает спред в редусе у того высок риск смерти

Илюша 🎂
кто юзает спред в редусе у того высок риск смерти

Это правда Квадрат в итоге получается, когда его можно избежать

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()]; }; поучаствую в конкурсе

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта