2014-04-09 69 views
7

获取最大最小号码如果我有一个这样的数组:从多维数组

array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]] 

我需要从这个数组找到最大值和最小值。在这种情况下,max = 33, min = 0

我看到阵列的例子减少,但我不希望找到一个内部数组的特定索引最大值。

+2

是数组总是二维或可能它有更多的? – aurbano

+0

@aurbano,是的,这是2维始终。 – benjamin54

+2

http://stackoverflow.com/questions/11149843/get-largest-value-in-multi-dimensional-array-javascript-or-coffeescript – Satpal

回答

10

与刚刚尝试:

var flat = []; 
$.map(array, function(item){ $.merge(flat, item); }); 

// or merge arrays using `join` and `split` 

var flat = array.join().split(','); 

var max = Math.max.apply(Math, flat), 
    min = Math.min.apply(Math, flat); 
+0

http://jsfiddle.net/rz6tz/ - 它工作正常,谢谢hsz –

+0

@sudhar不客气! – hsz

2

这里是纯JS基础的解决方案。没有jQuery的:

var flattened = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]].reduce(function(a, b) { 
    return a.concat(b); 
}); 

Math.max.apply(null, flattened) //33 

Math.min.apply(null, flattened) // 0 
1
min = max = array[0][0] 
for (i in array) 
    for (j in array[i]) { 
     if (array[i][j] > max) max = array[i][j] 
     if (array[i][j] < min) min = array[i][j]  
    } 
2

没有jQuery的,使用this answer增加最大和最小到数组:

Array.prototype.max = function() { 
    return Math.max.apply(null, this); 
}; 

Array.prototype.min = function() { 
    return Math.min.apply(null, this); 
}; 

答案就变成了:

arr = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]] 
maxm = arr.map(function(a){return a.max()}).max(); 
minm = arr.map(function(a){return a.min()}).min(); 
0

随着underscorejs:

var array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]; 
var max = _.chain(array) 
      .flatten() 
      .max() 
      .value() 

非常自我解释得到最小。

1

你可以这样做:

var array=[[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]; 
var newArr=array.join().replace(/\[\]/,"").split(',').map(function(x){return +x}); 
Math.max.apply(null,newArr); // 33 
Math.min.apply(null,newArr); // 0 
+0

你是outStandable。伟大的无言要说 –

+0

downvoter,谨慎地阐述? –

+0

http://jsfiddle.net/rz6tz/1/ - 它很好,为什么投票 –