median.js 559 B

12345678910111213141516171819202122232425262728
  1. import ascending from "./ascending";
  2. import number from "./number";
  3. import quantile from "./quantile";
  4. export default function(values, valueof) {
  5. var n = values.length,
  6. i = -1,
  7. value,
  8. numbers = [];
  9. if (valueof == null) {
  10. while (++i < n) {
  11. if (!isNaN(value = number(values[i]))) {
  12. numbers.push(value);
  13. }
  14. }
  15. }
  16. else {
  17. while (++i < n) {
  18. if (!isNaN(value = number(valueof(values[i], i, values)))) {
  19. numbers.push(value);
  20. }
  21. }
  22. }
  23. return quantile(numbers.sort(ascending), 0.5);
  24. }