it-swarm.com.de

Holen Sie sich den maximalen und minimalen Wert aus dem Array in JavaScript

Ich erstelle das folgende Array aus Datenattributen, und ich muss in der Lage sein, den höchsten und den niedrigsten Wert daraus zu ziehen, damit ich es später an eine andere Funktion übergeben kann.

var allProducts = $(products).children("li");
prices = []
$(allProducts).each(function () {
    var price = parseFloat($(this).data('price'));
    prices[price] = price;
});
console.log(prices[0]) <!-- this returns undefined

Meine Listenelemente sehen folgendermaßen aus (ich habe es aus Gründen der Lesbarkeit reduziert):

<li data-price="29.97"><a href="#">Product</a></li>
<li data-price="31.00"><a href="#">Product</a></li>
<li data-price="19.38"><a href="#">Product</a></li>
<li data-price="20.00"><a href="#">Product</a></li>

Ein schnelles console.log zu den Preisen zeigt mir mein Array an, das aussortiert zu sein scheint, so dass ich das erste und letzte Element nehmen könnte, von dem ich annehme, aber derzeit sind die Namen und Werte im Array gleich, also wenn ich versuche, Preise zu machen ], Ich bekomme undefined

[]
19.38   19.38
20.00   20.00
29.97   29.97
31.00   31.00

Ich habe das Gefühl, das ist eine dumme einfache Frage, also sei bitte nett :)

47
RJB

Um den minimalen/maximalen Wert in einem Array zu erhalten, können Sie Folgendes verwenden:

var _array = [1,3,2];
Math.max.apply(Math,_array); // 3
Math.min.apply(Math,_array); // 1
152

Anstelle von .each könnte ein anderer (vielleicht genauerer) Ansatz, um all diese Preise zu erhalten, sein:

var prices = $(products).children("li").map(function() {
    return $(this).prop("data-price");
}).get();

außerdem möchten Sie möglicherweise das Array filtern, um leere oder nicht numerische Arraywerte zu entfernen, falls diese vorhanden sind:

prices = prices.filter(function(n){ return(!isNaN(parseFloat(n))) });

dann verwenden Sie die Lösung von Sergey oben:

var max = Math.max.apply(Math,prices);
var min = Math.min.apply(Math,prices);
11
billynoah

Warum speichern Sie es nicht als Preisfeld statt als Objekt?

prices = []
$(allProducts).each(function () {
    var price = parseFloat($(this).data('price'));
    prices.Push(price);
});
prices.sort(function(a, b) { return a - b }); //this is the magic line which sort the array

Auf diese Weise kannst du einfach

prices[0]; // cheapest
prices[prices.length - 1]; // most expensive

Beachten Sie, dass Sie shift() und pop() verwenden können, um den minimalen bzw. maximalen Preis zu erhalten. Dies nimmt jedoch den Preis vom Array ab.

Eine noch bessere Alternative ist die Verwendung der folgenden Sergei-Lösung, indem Math.max und min verwendet werden.

BEARBEITEN:

Mir wurde klar, dass dies falsch wäre, wenn Sie etwas wie [11.5, 3.1, 3.5, 3.7] haben, da 11.5 als String behandelt wird und vor dem 3.x in der Wörterbuchreihenfolge erscheinen würde als Schwimmer:

prices.sort(function(a, b) { return a - b });
11
Andreas Wong

wenn Sie Werte (nicht innerhalb eines Arrays) "verstreut" haben, können Sie Folgendes verwenden:

var max_value = Math.max(val1, val2, val3, val4, val5);
3
rvandoni
arr = [9,4,2,93,6,2,4,61,1];
ArrMax = Math.max.apply(Math, arr);
1

verwenden Sie dies und es funktioniert sowohl für statische Arrays als auch für dynamisch generierte Arrays. 

var array = [12,2,23,324,23,123,4,23,132,23];
var getMaxValue = Math.max.apply(Math, array );

Ich hatte das Problem, wenn ich versuche, den maximalen Wert aus dem folgenden Code zu ermitteln 

$('#myTabs').find('li.active').prevAll().andSelf().each(function () {
            newGetWidthOfEachTab.Push(parseInt($(this).outerWidth()));
        });

        for (var i = 0; i < newGetWidthOfEachTab.length; i++) {
            newWidthOfEachTabTotal += newGetWidthOfEachTab[i];
            newGetWidthOfEachTabArr.Push(parseInt(newWidthOfEachTabTotal));
        }

        getMaxValue = Math.max.apply(Math, array);

Ich bekam 'NAN', wenn ich benutze 

    var max_value = Math.max(12, 21, 23, 2323, 23);

mit meinem Code 

0
Sodhi saab

Finden Sie die größte und kleinste Zahl in einem Array mit lodash.

var array = [1, 3, 2];
var func = _.over(Math.max, Math.min);
var [max, min] = func(...array);
// => [3, 1]
console.log(max);
console.log(min);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

0
Yi-Ting Liu