在多维数组javascript或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]  @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’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; }); 

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

@Raynos在这篇文章中提供了一个优秀的JSFIDDLE 。

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

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

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

我知道这是一个旧post,但如果你(或其他人)想要整个数组中最大的数字,请尝试:

 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 

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