11

次のような配列があります。

array = [[1, 5], [4, 7], [3, 8], [2, 3],  
 [12, 4], [6, 6], [4, 1], [3, 2], 
 [8, 14]]

必要なのは、セットの最初の値からの最大数なので、この場合は12. オンラインでいくつかの例を見ると、これを達成するために私が見た最良の方法は次のとおりです。

Math.max.apply Math, array

問題は、これは一次元配列でしか機能しないことです。これを私のシナリオにどのように実装しますか?(jquery 可)


最終的な解決策:

それは問題の一部ではありませんでしたが、配列からの最小値と最大値の両方が必要であり、それによって状況が少し変わりました。

    unless device.IE
        justTheDates    = magnitudeArray.map (i) -> i[0]
        @earliest       = Math.min.apply Math, justTheDates
        @latest         = Math.max.apply Math, justTheDates                 
    else
        @earliest       = magnitudeArray[0][0]
        @latest         = magnitudeArray[0][0]
        for magnitudeItem in magnitudeArray
            @earliest   = magnitudeItem[0] if magnitudeItem[0] < @earliest
            @latest     = magnitudeItem[0] if magnitudeItem[0] > @latest
4

9 に答える 9

14

あなたが使用することができます.reduce()...

array.reduce(function(max, arr) { 
    return Math.max(max, arr[0]); 
}, -Infinity)

これは使用しないバージョンMath.maxです...

array.reduce(function(max, arr) {
    return max >= arr[0] ? max : arr[0];
}, -Infinity);

...そしてjsPerf テスト.

于 2012-06-22T03:47:15.403 に答える
9

http://jsfiddle.net/zerkms/HM7es/

var max = Math.max.apply(Math, arr.map(function(i) {
    return i[0];
}));​

したがって、最初array.map()は2次元配列をフラットな配列に変換するために使用し、その後はMath.max()

于 2012-06-22T03:44:07.203 に答える
2

max中間配列の生成を回避する Underscore.js を使用した簡単なソリューション:

max = _(array).max(_.first)[0]

( JSFiddle )

于 2012-06-22T04:20:25.003 に答える
1

CoffeeScript で内包表記を使用する:

Math.max.apply Math, (x[0] for x in array)

実行例

于 2012-06-22T03:57:17.207 に答える
1

また、_underscore.js を見てください。関数 _max() へのリンクを次に示します。

  • 読み取り、書き込み、および保守がより効率的です。

_underscore の最も優れた点は、_max と同様のヘルパー関数が約 100 あることです。ソートのように。

以下の構文を比較してください。

var sortedObject = _.sortBy(object, function(val, key, object) {
    return val;
});

それらは連鎖しやすく、解釈しやすいです!(ダグラス・クロックフォードが示唆するように)

優れたJSFIDDLEは、この投稿で @Raynos によって提供されました。

生の JavaScript を使用して常に配列操作を行っている場合は、_underscore.js を確認してください。コードを大幅に簡素化できます。

お役に立てば幸いです。ナッシュ

于 2012-06-22T03:57:57.417 に答える
1

これが古い投稿であることは知っていますが、配列全体で最大の数が必要な場合は、次を試してください。

var array = [[1, 5], [4, 7], [3, 8], [2, 3],  
 [12, 4], [6, 6], [4, 1], [3, 2], 
 [8, 14]];

var max = array.reduce(function (max, arr) {
    return max >= Math.max.apply(max, arr) ? max : Math.max.apply(max, arr);
}, -Infinity);
console.log(max);

この例では、値 14 が返されます。

于 2016-12-18T13:06:27.293 に答える
1
Array.prototype.maxX = function(){
  return Math.max.apply(Math,this.map(function(o){return o[0];}));
};
于 2013-05-02T09:36:42.260 に答える