2016-04-29 1 views
1

J'ai ce petit script qui retournera le plus grand nombre d'un tableau, cela fonctionne, sauf qu'il ne fonctionne pas pour les tableaux multidimensionnels.Retour tableau de plus grands nombres

Comment est-ce que je peux ajuster ceci pour renvoyer un tableau des plus grands nombres dans un tableau multidimensionnel?

Source:

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

Exemple:

> 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 
> 

Sortie prévue:

[5, 27, 39, 1001] 
+0

êtes-vous prêt à utiliser un module comme underscore? – lipp

+0

connaissez-vous les dimensions (profondeur) à l'avance? – lipp

+0

la boucle for peut être remplacée par 'var larger = Math.max.apply (Math, arr);'. –

Répondre

1

map Juste le résultat des simples résultats.

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>');

mentionné ci-dessus (@Tushar) version courte

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

[Peut être raccourci] (http://stackoverflow.com/questions/36940109/returning-array-of-largest-numbers#comment61439382_36940109) – Tushar

+0

Cela prend tout son sens, merci. – 13aal

+0

@Tushar toujours plus court 'arr.map (e => Math.max (... e))' – isvforall

2

Vous pouvez utiliser ES6 arrow function et spread operator.

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

map va parcourir (à savoir. Tableaux imbriqués) sur tous les éléments du réseau principal et Math.max(...e) retournera l'élément max de ce tableau. Le ...e transmettra les éléments du tableau e individuellement au 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

J'aime vraiment ça. :) – Tushar