@nteract/data-explorer
Version:
Transform for data resource JSON
57 lines (56 loc) • 2.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUniqueValues = exports.sortByOrdinalRange = void 0;
function stringOrFnAccessor(datapoint, accessor) {
return typeof accessor === "function"
? accessor(datapoint)
: datapoint[accessor];
}
exports.sortByOrdinalRange = (oAccessor, rAccessor, secondarySort, data) => {
const subsortData = {};
let subsortArrays = [];
data.forEach((datapoint) => {
const ordinalValue = stringOrFnAccessor(datapoint, oAccessor);
if (!subsortData[ordinalValue]) {
subsortData[ordinalValue] = { array: [], value: 0, label: ordinalValue };
subsortArrays.push(subsortData[ordinalValue]);
}
subsortData[ordinalValue].array.push(datapoint);
subsortData[ordinalValue].value += stringOrFnAccessor(datapoint, rAccessor);
});
subsortArrays = subsortArrays.sort((ordinalAData, ordinalBData) => {
if (ordinalBData.value === ordinalAData.value) {
if (ordinalAData.label < ordinalBData.label) {
return -1;
}
if (ordinalAData.label > ordinalBData.label) {
return 1;
}
return 1;
}
return ordinalBData.value - ordinalAData.value;
});
if (secondarySort !== "none") {
subsortArrays.forEach((ordinalData) => {
ordinalData.array = ordinalData.array.sort((ordinalAData, ordinalBData) => stringOrFnAccessor(ordinalBData, secondarySort) -
stringOrFnAccessor(ordinalAData, secondarySort));
});
}
return subsortArrays.reduce((combinedArray, ordinalData) => [
...combinedArray,
...ordinalData.array,
], []);
};
/*
Returns uniques values in a column as strings
Safely stringifies different data types, including null/undefined.
*/
exports.getUniqueValues = (points, accessor) => {
return [
...new Set(points.map((d) => {
const value = d[accessor];
// Don't call stringify on a string, as it will add "quote" marks around your value.
return typeof value === "string" ? value : JSON.stringify(value);
})),
];
};