UNPKG

vis-utils

Version:

Utility functions for data visualization

57 lines (49 loc) 1.99 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = extentMulti; var _extentLimited = require('./extentLimited'); var _extentLimited2 = _interopRequireDefault(_extentLimited); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Compute the extent (min and max) across an array of arrays/objects * * For example: * ``` * extentMulti([[4, 3], [1, 2]], d => d); * > 1, 4 * ``` * ``` * extentMulti([{ results: [{ x: 4 }, { x: 3 }] }, { results: [{ x: 1 }, { x: 2 }] }], * d => d.x, array => array.results); * > 1, 4 * ``` * * @param {Array} outerArray An array of arrays or objects * @param {Function} [valueAccessor] How to read a value in the array (defaults to identity) * @param {Function} [arrayAccessor] How to read an inner array (defaults to identity) * @param {Number} [minPercentile] If provided, limits the min to this percentile value (between 0 and 1). * If provided, the data is sorted by taking the difference of the valueAccessor results. * @param {Number} [maxPercentile] If provided, limits the max to this percentile value (between 0 and 1). * If provided, the data is sorted by taking the difference of the valueAccessor results. * @return {Array} the extent */ function extentMulti(outerArray) { var valueAccessor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (d) { return d; }; var arrayAccessor = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (d) { return d; }; var minPercentile = arguments[3]; var maxPercentile = arguments[4]; if (!outerArray || !outerArray.length) { return undefined; } // flatten the arrays into one big array var combined = outerArray.reduce(function (carry, inner) { return carry.concat(arrayAccessor(inner)); }, []); return (0, _extentLimited2.default)(combined, valueAccessor, minPercentile, maxPercentile); }