@tidyjs/tidy
Version:
Tidy up your data with JavaScript, inspired by dplyr and the tidyverse
51 lines (48 loc) • 1.49 kB
JavaScript
import { singleOrArray } from './helpers/singleOrArray.js';
import { everything } from './selectors/everything.js';
function processSelectors(items, selectKeys) {
let processedSelectKeys = [];
for (const keyInput of singleOrArray(selectKeys)) {
if (typeof keyInput === "function") {
processedSelectKeys.push(...keyInput(items));
} else {
processedSelectKeys.push(keyInput);
}
}
if (processedSelectKeys.length && processedSelectKeys[0][0] === "-") {
processedSelectKeys = [...everything()(items), ...processedSelectKeys];
}
const negationMap = {};
const keysWithoutNegations = [];
for (let k = processedSelectKeys.length - 1; k >= 0; k--) {
const key = processedSelectKeys[k];
if (key[0] === "-") {
negationMap[key.substring(1)] = true;
continue;
}
if (negationMap[key]) {
negationMap[key] = false;
continue;
}
keysWithoutNegations.unshift(key);
}
processedSelectKeys = Array.from(new Set(keysWithoutNegations));
return processedSelectKeys;
}
function select(selectKeys) {
const _select = (items) => {
let processedSelectKeys = processSelectors(items, selectKeys);
if (!processedSelectKeys.length)
return items;
return items.map((d) => {
const mapped = {};
for (const key of processedSelectKeys) {
mapped[key] = d[key];
}
return mapped;
});
};
return _select;
}
export { processSelectors, select };
//# sourceMappingURL=select.js.map