簡體   English   中英

在多維數組javascript或coffeescript中獲得最大價值

[英]Get largest value in multi-dimensional array javascript or coffeescript

我有一個如下所示的數組:

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

問題是,這僅適用於單維數組。 我怎么能為我的Senario詆毀這個? (允許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

你可以使用.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測試

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

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

因此,首先使用array.map()將二維數組轉換為平面數組,然后使用Math.max()

使用Underscore.js' A簡單的解決方案max的是避免產生中間數組:

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

JSFiddle

在CoffeeScript中使用理解:

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

運行示例

另外,請查看_underscore.js。 這是函數_max()的鏈接。

  • 讀取,寫入和維護效率更高。

關於_underscore的最好的部分是大約有另外一百個類似於_max的輔助函數。 喜歡排序。

比較以下語法:

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

它們很容易鏈接和解釋! (像Douglas Crockford可能建議的那樣)

@Raynos這篇文章中提供了一個優秀的JSFIDDLE

如果您一直使用原始JavaScript進行數組操作,請查看_underscore.js,它可以大大簡化您的代碼。

希望有所幫助,一切順利! 納什

Array.prototype.maxX = function(){
  return Math.max.apply(Math,this.map(function(o){return o[0];}));
};

我知道這是一個舊帖子,但是如果你(或其他人)想要整個數組中最大的數字,請嘗試:

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。

樣本輸入:largestOfFour([[4,5,1,3],[13,27,18,26],[32,35,37,39],[1000,1001,185,1]]);

function largestOfFour(arr) {

    var largest = 0;
    var largestArr = [];
    for(var i=0; i<arr.length; i++){
      for(var j=0; j<arr[i].length; j++){

        if(largest < arr[i][j]){
          largest = arr[i][j];
        }
        largestArr[i] = largest;
      }      
      largest = 0;
    }

  return largestArr;
}

您可以從兩個dim數組中將最大數字填充到新Array中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM