在多维数组javascript或coffeescript中获得最大价值

时间:2012-06-22 03:36:52

标签: javascript jquery arrays 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

8 个答案:

答案 0 :(得分:13)

您可以使用.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 test

答案 1 :(得分:8)

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

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

首先,您使用array.map()将二维数组转换为平面数组,然后使用Math.max()

答案 2 :(得分:2)

使用Underscore.js'max避免生成中间数组的简单解决方案:

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

JSFiddle

答案 3 :(得分:1)

在CoffeeScript中使用理解:

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

Running example

答案 4 :(得分:1)

另外,请查看_underscore.js。 Here is a link to the function _max().

  • 阅读,编写和维护效率更高。

关于_underscore的最好的部分是大约有另外一百个类似于_max的辅助函数。喜欢排序。

比较以下语法:

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

它们易于链接和解释! (就像道格拉斯·克罗克福德所说的那样)

JSFIDDLE中提供了一个优秀的this post by @Raynos

如果您一直使用原始JavaScript进行数组操作,请查看_underscore.js,它可以大大简化您的代码。

希望有所帮助, 祝一切顺利! 纳什

答案 5 :(得分:1)

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

答案 6 :(得分: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。

答案 7 :(得分:0)

示例输入: maximumOfFour([[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;
}

您可以从两个昏暗数组中将最大数字填充到新数组中。