@tanstack/charts
Version:
A chart grammar for TypeScript and JavaScript. Marks consume your data directly, channels describe visual encodings, and the engine compiles them into a renderer-neutral keyed scene. TanStack's compact scales cover common numeric and categorical mappings.
32 lines (31 loc) • 832 B
JavaScript
import { materializeGroups, toArray } from "./transform-internal.js";
import {
assertTransformOutputNames,
prepareOutputs,
reducePreparedOutputs
} from "./transform-reduce-internal.js";
function groupBy(source, options) {
const data = toArray(source);
const groups = materializeGroups(data, options.by);
const groupNames = groups[0] ? Object.keys(groups[0].group) : [];
assertTransformOutputNames(
options.outputs,
[...groupNames, "source", "sourceIndexes"],
"groupBy"
);
const preparedOutputs = prepareOutputs(data, options.outputs);
return groups.map(({ group, indexes }) => ({
...group,
source: indexes.map((index) => data[index]),
sourceIndexes: indexes,
...reducePreparedOutputs(
data,
indexes,
group,
preparedOutputs
)
}));
}
export {
groupBy
};