56

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

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は、ソートされているように見える配列を示しているので、想定する最初と最後の要素を取得できますが、現在、配列内の名前と値は同じであるため、prices[0 ]、私は未定義になります

[]
19.38   19.38
20.00   20.00
29.97   29.97
31.00   31.00

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

4

8 に答える 8

169

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

var _array = [1,3,2];
Math.max.apply(Math,_array); // 3
Math.min.apply(Math,_array); // 1
于 2012-08-16T10:58:21.407 に答える
12

オブジェクトではなく価格の配列として保存してみませんか?

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さらに良い代替策は、とをそれぞれ使用して、以下のSergeiソリューションを使用することminです。

編集:

[11.5, 3.1, 3.5, 3.7]as11.5が文字列として扱われ、辞書の順序のに来る場合、これは間違っていることに気付き3.xました。カスタムの並べ替え関数を渡して、実際にfloatとして扱われるようにする必要があります。

prices.sort(function(a, b) { return a - b });
于 2012-08-16T10:36:13.550 に答える
11

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

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

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

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

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

var max = Math.max.apply(Math,prices);
var min = Math.min.apply(Math,prices);
于 2014-08-21T08:26:02.020 に答える
3

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

var max_value = Math.max(val1, val2, val3, val4, val5);
于 2013-12-10T10:37:20.973 に答える
3
arr = [9,4,2,93,6,2,4,61,1];
ArrMax = Math.max.apply(Math, arr);
于 2014-11-24T16:31:07.390 に答える
1

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

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

私のコードで

于 2017-04-24T10:22:51.490 に答える
1

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>

于 2019-01-03T09:16:06.320 に答える
0

数学ライブラリや並べ替えロジックを使用せずに解決策を見つける必要がある場合は、以下の解決策が役立つ可能性があります。

javascriptで最大値を見つけるには、

var max = -Infinity;
 for (var i = 0; i < arr.length; ++i) {
    if (arr[i] < max) continue;
    if (arr[i] > max) {
        max = arr[i];
 }
}
return max; 

最小値を見つけるには、

 var min = +Infinity;
 for (var i = 0; i < arr.length; ++i) {
    if (arr[i] > min) continue;
    if (arr[i] < min) {
        min = arr[i];
 }
}
return min;

最大値のすべての出現を見つけるには、(すべての最小値を取得するように比較を変更します)

 var max = -Infinity, result = [];
  for (var i = 0; i < arr.length; ++i) {
   if (arr[i] < max) continue;
   if (arr[i] > max) {
      result = [];
      max = arr[i];
    }
   result.push(max);
  }
 return result; // return result.length to return the number of occurrences of max values.
于 2021-05-09T08:23:53.313 に答える