12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- // Thanks for hints: https://github.com/paulmillr/es6-shim
- "use strict";
- var some = Array.prototype.some
- , abs = Math.abs
- , sqrt = Math.sqrt
- , compare = function (val1, val2) {
- return val2 - val1;
- }
- , divide = function (value) {
- return value / this;
- }
- , add = function (sum, number) {
- return sum + number * number;
- };
- // eslint-disable-next-line no-unused-vars
- module.exports = function (val1, val2 /*, …valn*/) {
- var result, numbers;
- if (!arguments.length) return 0;
- some.call(arguments, function (val) {
- if (isNaN(val)) {
- result = NaN;
- return false;
- }
- if (!isFinite(val)) {
- result = Infinity;
- return true;
- }
- if (result !== undefined) return false;
- val = Number(val);
- if (val === 0) return false;
- if (numbers) numbers.push(abs(val));
- else numbers = [abs(val)];
- return false;
- });
- if (result !== undefined) return result;
- if (!numbers) return 0;
- numbers.sort(compare);
- return numbers[0] * sqrt(numbers.map(divide, numbers[0]).reduce(add, 0));
- };
|