join.js 965 B

1234567891011121314151617181920212223242526
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Join = void 0;
  4. const d3_array_1 = require("d3-array");
  5. function field(key) {
  6. return typeof key === 'string' ? (d) => d[key] : key;
  7. }
  8. /**
  9. * Join data with another dataset by SQL style.
  10. */
  11. const Join = (options) => {
  12. // const { fromKey, from, key, unknown = NaN, ...rest } = options;
  13. const { join, on, select = [], as = select, unknown = NaN } = options;
  14. const [key, fromKey] = on;
  15. const fk = field(fromKey);
  16. const k = field(key);
  17. const keyData = (0, d3_array_1.rollup)(join, ([d]) => d, // Get the first matched.
  18. (d) => fk(d));
  19. return (data) => data.map((d) => {
  20. const source = keyData.get(k(d));
  21. return Object.assign(Object.assign({}, d), select.reduce((prev, key, idx) => ((prev[as[idx]] = source ? source[key] : unknown), prev), {}));
  22. });
  23. };
  24. exports.Join = Join;
  25. exports.Join.props = {};
  26. //# sourceMappingURL=join.js.map