

Group By Key
Write a generic groupBy<T, K extends keyof T>(items: T[], key: K): Record<string, T[]> that groups items by the value of one of their properties.
Each group's name is the property value turned into a string, and items keep their original order inside a group. Because K extends keyof T, calling groupBy(stars, "colour") on objects without a colour property is a compile error, not a runtime surprise.
Examples
groupBy([{ name: "Vega", colour: "blue" }, { name: "Betelgeuse", colour: "red" }, { name: "Rigel", colour: "blue" }], "colour")
→ { blue: [{ name: "Vega", colour: "blue" }, { name: "Rigel", colour: "blue" }], red: [{ name: "Betelgeuse", colour: "red" }] }
groupBy([{ id: 1, tier: 2 }, { id: 2, tier: 1 }, { id: 3, tier: 2 }], "tier")
→ { "1": [{ id: 2, tier: 1 }], "2": [{ id: 1, tier: 2 }, { id: 3, tier: 2 }] }
solution.ts
TYPESCRIPT
Saved as you type
Tests
0 of 3 passing- •stars by colourgroupBy([{ name: "Vega", colour: "blue" }, { name: "Betelgeuse", colour: "red" }, { name: "Rigel", colour: "blue" }], "colour")expected { blue: [{ name: "Vega", colour: "blue" }, { name: "Rigel", colour: "blue" }], red: [{ name: "Betelgeuse", colour: "red" }] }
- •numbers become group namesgroupBy([{ id: 1, tier: 2 }, { id: 2, tier: 1 }, { id: 3, tier: 2 }], "tier")expected { "1": [{ id: 2, tier: 1 }], "2": [{ id: 1, tier: 2 }, { id: 3, tier: 2 }] }
- •no itemsgroupBy([], "type")expected {}
On the line
+60 XP
Pass all 3 tests to claim it.
