2016-04-29 5 views
1

多次元配列では機能しないことを除いて、配列の最大数を返す小さなスクリプトがあります。最大の配列を返す

多次元配列内で最大の数値の配列を返すにはどうすればよいですか?

出典:

function largestOfFour(arr) { 
    for(var x=0;x < arr.length; x++){ 
     var largest = Math.max.apply(Math, arr[x]); 
     return largest; 
    } 
} 

例:

> function largestOfFour(arr) { 
...  for(var x=0;x < arr.length; x++){ 
.....   var largest = Math.max.apply(Math, arr[x]); 
.....   return largest; 
.....  } 
... } 
undefined 
> largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 
5 
> 

予想される出力:

[5, 27, 39, 1001] 
+0

あなたは、アンダースコアのようなモジュールを使用して喜んでいますか? – lipp

+0

予め寸法(深さ)を知っていますか? – lipp

+0

forループは 'var maximum = Math.max.apply(Math、arr);'で置き換えることができます。 –

答えて

1

ただ一つの結果の結果をマップします。

function largestOfFour(array) { 
 
    return array.map(function (a) { 
 
     return Math.max.apply(null, a); 
 
    }); 
 
} 
 

 
var largest = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 
 
document.write('<pre>' + JSON.stringify(largest, 0, 4) + '</pre>');

上記(@Tushar)ショートバージョン

function largestOfFour(array) { 
 
    return array.map(Math.max.apply.bind(Math.max, null)); 
 
} 
 

 
var largest = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 
 
document.write('<pre>' + JSON.stringify(largest, 0, 4) + '</pre>');

+3

[短縮することができます](http://stackoverflow.com/questions/36940109/returning-array-of-largest-numbers#comment61439382_36940109) – Tushar

+0

これは完璧な意味があります、ありがとうございます。 – 13aal

+0

@Tusharもっと短く 'arr.map(e => Math.max(... e))' – isvforall

2

あなたがES6 arrow functionspread operatorを使用することができます。

arr.map(e => Math.max(...e)) 
map

はメインアレイの全ての要素の上(すなわち、ネストされた配列)を反復し、Math.max(...e)は、その配列の最大要素を返します。 ...eeの要素を個別にmax()に渡します。

var arr = [ [4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1] ] 
 

 
var res = arr.map(e => Math.max(...e)) 
 

 
document.write(res);

+1

私は本当にそれが好きです。 :) – Tushar