Math.max und Math.min NaN bei undefiniertem Eintrag
Lesezeit: 4 Minuten
Jack the Ripper
Beim Übergeben von Werten an die Math.max oder Math.min Funktion in JavaScript, geben sie jeweils die höchsten und niedrigsten Werte aus der Eingabe zurück.
Wenn jedoch ein undefiniertes Datenelement eingegeben wird, z
Math.max(5,10,undefined);
Das zurückgegebene Ergebnis ist NaN. Gibt es eine einfache Möglichkeit, dies mit JS/jQuery zu beheben?
Sie können Ihre eigene Wrapper-Funktion zur Überprüfung schreiben oder einfach selbst implementieren.
– Alvin Wong
18. Oktober 2012 um 14:52 Uhr
Ich hasse faul
Ich vermute die undefined ist eigentlich eine Variable.
Sie können ersetzen -Infinity für alle NaN Wert, um eine Zahl sicherzustellen.
Gute Antwort! Es würde nicht schaden, auch die Math.min-Implementierung einzubeziehen.
– cbayram
18. Oktober 2012 um 14:57 Uhr
Anstatt von isNaN(foo) Sie können verwenden foo == foo Welche ist schneller (Quelle).
– Florent
18. Oktober 2012 um 15:19 Uhr
Ich verwende die kürzere Form Math.max(5, 10, foo || -Infinity)
– Doug Reeder
13. März 2018 um 3:46 Uhr
@doug reeder das funktioniert nicht, wenn foo falsch wie 0 ist
– Tom
5. Januar 2019 um 9:57 Uhr
Ja, wenn 0 der größte Wert sein könnte, müssen Sie die längere Form verwenden.
– Doug Reeder
6. Januar 2019 um 14:08 Uhr
Vision
Schreibe dein Eigenes max Funktion:
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);
}
Number.isInteger(0.2) ist falsch, daher ist dieser Ansatz mit jeder Dezimalzahl unzuverlässig, z Math.max([0, 0.2].filter(Number.isInteger)). Versuchen Number.isFinite stattdessen.
– Garrett
20. Januar 2021 um 1:36 Uhr
@Garrett, ich hatte dies am Ende meiner Antwort erwähnt, aber dank Ihres Kommentars habe ich es nach oben verschoben, sodass es jetzt klarer ist. Vielen Dank
– TechWeisheit
20. Januar 2021 um 10:48 Uhr
Überprüfen Sie, ob jede Nummer definiert ist, bevor Sie sie an übergeben max. Verwenden Sie einen Sentinel-Wert als Standard (z -Infinity). Für min würden Sie verwenden möchten 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
Gibt den Mindestwert in der angegebenen Iterable in natürlicher Reihenfolge zurück.
…
Anders als das eingebaute Math.min ignoriert diese Methode undefinierte, Null- und NaN-Werte; Dies ist nützlich, um fehlende Daten zu ignorieren. Außerdem werden Elemente in natürlicher Reihenfolge statt in numerischer Reihenfolge verglichen. Zum Beispiel das Minimum der Saiten [“20”, “3”] ist „20“, während das Minimum der Zahlen [20, 3] ist 3.
Wahyudiansyah Arif
mit falsy in Math.max
var foo;
Math.max(5, 10, !isNaN(foo) && foo);
var foo;
Math.min(5, 10, !isNaN(foo) && foo);
Garrett
// Returns largest numeric value; excludes NaN's.
function getMax(...args) {
return Math.max(...args.filter(Number.isFinite));
}
Während dieser Code die Frage beantworten kann, würde die Bereitstellung von zusätzlichem Kontext dazu, wie und/oder warum er das Problem löst, den langfristigen Wert der Antwort verbessern. Bitte lesen Sie die Tour und Wie schreibe ich eine gute Antwort?
– Mhd Alaa Alhaj
20. Januar 2021 um 9:23 Uhr
10198500cookie-checkMath.max und Math.min NaN bei undefiniertem Eintragyes
Sie können Ihre eigene Wrapper-Funktion zur Überprüfung schreiben oder einfach selbst implementieren.
– Alvin Wong
18. Oktober 2012 um 14:52 Uhr