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

问题是,这只适用于一维数组。我将如何为我的 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
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()将二维数组转换为平面数组,然后使用Math.max()

于 2012-06-22T03:44:07.203 回答
2

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

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 最好的部分是还有大约 100 个类似于 _max 的辅助函数。喜欢排序。

比较下面的语法:

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

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

@Raynos这篇文章中提供了一个出色的 JSFIDDLE 。

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

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

于 2012-06-22T03:57:57.417 回答
1
Array.prototype.maxX = function(){
  return Math.max.apply(Math,this.map(function(o){return o[0];}));
};
于 2013-05-02T09:36:42.260 回答
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 回答
0

样本输入: maximumOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 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;
}

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

于 2016-08-01T19:58:52.440 回答
0

ES2019 Array.prototype.flat() 与解构。

const max = Math.max(...arr.flat());

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat

于 2021-08-31T02:17:23.377 回答