我有一个如下所示的数组:
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
答案 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)
答案 3 :(得分:1)
答案 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;
}
您可以从两个昏暗数组中将最大数字填充到新数组中。