group-by-ts
v1.0.1
Published
groupBy is a light weight npm typescript package for grouping items in javascript arrays the function expects a javascript array, field name to be grouped by, a preaction (function of your choice that will return a new K Object) and a postAction __optio
Downloads
32
Readme
Group-By typescript
groupBy is a light weight npm typescript package for grouping items in javascript arrays the function expects a javascript array, field name to be grouped by, a preaction (function of your choice that will return a new K Object) and a postAction optional (function of your choice that will iterate the new K[] list and do additional actions and return the new processed data as same type K[])
example
import {test,expect} from "vitest";
import { groupBy } from "./index";
type Pupil = {
name: string;
grade: number;
major: string;
}
type GroupedPupil = {
name: string;
grade: number;
}
const arr: Pupil[] = [{ name: "Alice", grade: 70, major: "physics" }, { name: "Alice", grade: 80, major: "chemistry" }, { name: "Alice", grade: 60, major: "Mathematics" }
, { name: "Bob", grade: 85, major: "physics" }, { name: "Bob", grade: 80, major: "chemistry" }
, { name: "Charlie", grade: 100, major: "Literature" }, { name: "Charlie", grade: 90, major: "History" },
{ name: "David", grade: 95, major: "Computer Science" }, { name: "David", grade: 85, major: "Mathematics" }];
function sum(newValue: Pupil, previousValue: GroupedPupil): GroupedPupil {
const previousGrade = previousValue.grade ? previousValue.grade : 0;
return {
name: newValue.name,
grade: previousGrade + Number(newValue.grade)
}
}
function avarage(newItems: GroupedPupil[]): GroupedPupil[] {
return newItems.map(item => {
const count = arr.filter(pupil => pupil.name === item.name).length;
return {
name: item.name,
grade: item.grade / count // Example average calculation (replace with actual logic)
};
});
}
test("groupBy function test", () => {
expect(groupBy(arr, "name", sum, avarage)).toEqual([
{ name: "Alice", grade: 70 },
{ name: "Bob", grade: 82.5 },
{ name: "Charlie", grade: 95 },
{ name: "David", grade: 90 }
]);
});