20

Math.maxJavaScriptのor関数に値を渡すMath.minと、入力からそれぞれ最高値と最低値が返されます。

ただし、未定義のデータが入力された場合、たとえば

Math.max(5,10,undefined);

返される結果はですNaN。JS / jQueryを使用してこれを修正する簡単な方法はありますか?

4

7 に答える 7

28

undefinedは実際にはいくつかの変数だと思います。

数値を確保するために、-Infinity任意の値に置き換えることができます。NaN

var foo;

Math.max(5, 10, isNaN(foo) ? -Infinity : foo); // returns 10

同じ概念をで使用できますMath.minが、Infinity

var foo;

Math.min(5, 10, isNaN(foo) ? Infinity : foo); // returns 5
于 2012-10-18T14:49:28.400 に答える
11

独自のmax関数を作成します。

function max() {
    var par = []
    for (var i = 0; i < arguments.length; i++) {
        if (!isNaN(arguments[i])) {
            par.push(arguments[i]);
        }
    }
    return Math.max.apply(Math, par);
}

または、配列フィルタリングを使用して短くします。

function max() {
    var args = Array.prototype.slice.call(arguments);
    return Math.max.apply(Math, args.filter(function(val) {
       return !isNaN(val);
    }));
}

使用法:

max(5, 10, undefined);   // output: 10
于 2012-10-18T14:52:45.550 に答える
2

それは次のように簡単です:

// ES6 (returns: 10)
Math.max(...[5, 10, undefined].filter(Number.isFinite))

または:

// ES5 (returns: 10)
Math.max.apply(null, [5, 10, undefined].filter(Number.isFinite))

読みやすく、目的を伝えるだけだと思います。

説明:を利用して、未定義の値をフィルターで除外し、ES6のspread演算子またはES5のメソッドを使用して、引数として関数に渡します。Number primitive wrapper objectMath.maxFunction.prototype.apply()

于 2020-11-11T00:24:50.117 に答える
1

に渡す前に、各番号が定義されていることを確認してくださいmax。デフォルトとして番兵の値を使用します(など-Infinity)。分のためにあなたは使用したいと思うでしょうInfinity

var a = 5;
var b = 10;
var c = undefined;

var defaultForMax = function (num) {
    return typeof num === 'number' ? num : -Infinity;
};

c = defaultForMax(c); // c is now -Infinity

Math.max(a, b, c); // 10

http://jsfiddle.net/QTckE/

于 2012-10-18T14:58:35.567 に答える
0

私の意見ではさらに簡単ですが、d3を使用してもかまわない場合は、次のようにすることができます。

d3.max([5,10,undefined]) // 10

d3ドキュメント(https://github.com/d3/d3-array#statistics)から:

自然な順序を使用して、指定されたiterableの最小値を返します。

..。

組み込みのMath.minとは異なり、このメソッドは未定義のnull値とNaN値を無視します。これは、欠落しているデータを無視するのに役立ちます。さらに、要素は、数値順ではなく自然順を使用して比較されます。たとえば、文字列[“ 20”、“ 3”]の最小値は“ 20”ですが、数字[20、3]の最小値は3です。

于 2019-04-12T13:22:00.753 に答える
0

Math.max内で偽物を使用する

var foo;

Math.max(5, 10, !isNaN(foo) && foo);
var foo;

Math.min(5, 10, !isNaN(foo) && foo);
于 2020-05-27T04:33:40.773 に答える
0
// Returns largest numeric value; excludes NaN's.
function getMax(...args) {
 return Math.max(...args.filter(Number.isFinite));
}
于 2021-01-20T01:44:11.307 に答える