Stats Collector Reference Source Repository

src/collectors/number/Median.js

import Collector from '../Collector';

/**
 * A collector that captures `median`
 *   - The numeric value separating the higher half of the ordered
 *     sample data from the lower half. If n is odd the median is
 *     the center value.  If n is even the median is the average
 *     of the 2 center values.
 */
export default class Median extends Collector {
  constructor() {
    super('median', 0, ['valuesSorted']);
  }
  handleGet(state) {
    const len = state.valuesSorted.length;
    const center = Math.floor(len / 2);
    if (len % 2 !== 0) {
      return state.valuesSorted[center];
    } else {
      return (state.valuesSorted[center - 1] + state.valuesSorted[center]) / 2;
    }
  }
}