heyujie
2021-05-20 6ebdefb4a5b2be82a8c452c0bb4624f3d85a17b7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 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));
};