web-dev-qa-db-ja.com

JavaScriptの配列から最大値と最小値を取得する

データ属性から次の配列を作成していますが、後で別の関数に渡すことができるように、そこから最高値と最低値を取得できる必要があります。

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

私のリスト項目は次のようになります(読みやすくするために削減しました)。

<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>

価格に関するconsole.logのクイックログには、ソートされているように見える配列が表示されるため、最初の要素と最後の要素を取得できますが、現在、配列の名前と値は同じなので、price [0 ]、私はndefinedを取得します

[]
19.38   19.38
20.00   20.00
29.97   29.97
31.00   31.00

これは馬鹿げた簡単な質問だと感じたので、親切にしてください:)

49
RJB

配列の最小/最大値を取得するには、次を使用できます。

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

オブジェクトの代わりに価格の配列として保存しないのはなぜですか?

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

そうすれば

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

shift()pop()を実行してそれぞれ最小価格と最大価格を取得できますが、配列から価格を引き離すことに注意してください。

さらに優れた代替手段は、Math.maxおよびminをそれぞれ使用して、以下のSergeiソリューションを使用することです。

編集:

[11.5, 3.1, 3.5, 3.7]が文字列として扱われ、before the 11.5が辞書順であるため、3.xのようなものがある場合、これは間違っていることに気付きました。カスタムソート関数を渡して、実際にフロートとして扱われることを確認する必要があります。

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

.eachの代わりに、これらすべての価格を取得する別の(おそらくより簡潔な)アプローチがあります。

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

さらに、空の配列値または数値以外の配列値が存在する場合にそれらを取り除くために配列をフィルタリングすることを検討することもできます。

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

次に、上記のセルゲイのソリューションを使用します。

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

「分散」(配列内ではない)値がある場合は、次を使用できます。

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);
2

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>
1
Penny Liu

これを使用すると、静的配列と動的に生成された配列の両方で機能します。

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

以下のコードから最大値を見つけようとすると問題が発生しました

$('#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);

使用すると'NAN'を取得していました

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

私のコードで

0
Sodhi saab