vis-utils
Version:
Utility functions for data visualization
57 lines (49 loc) • 1.99 kB
JavaScript
;
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);
}