UNPKG

@tidyjs/tidy

Version:

Tidy up your data with JavaScript, inspired by dplyr and the tidyverse

51 lines (48 loc) 1.49 kB
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