En JavaScript, vous pouvez utiliser la valeur maximale intégrée de math.max (), mais il est toujours difficile d'extraire la valeur maximale de plusieurs tableaux.
Description du problème
Supposons que vous ayez un tableau, et ce tableau contient un sous-réseau de nombres, et ce que nous voulons faire, c'est renvoyer son plus grand nombre maximum de chaque sous-détail dans le tableau.
Solution de base
Fonction BigOffour (arr) {var Results = []; // Créer une variable de résultat pour stocker // Créer une boucle extérieure pour traverser le tableau extérieur pour (var n = 0; n <arr.length; n ++) {var Largenumber = 0; // Créez une deuxième variable pour stocker le plus grand nombre // Créer une autre boucle pour traverser le sous-réseau pour (var sb = 0; sb <arr [n] .length; sb ++) {// Vérifiez si l'élément du sous-réseau est supérieur à la valeur stockée maximale actuelle si (arr [n] [sb]> largembumbe arr [n] [sb];}} // après une boucle interne, enregistrez la valeur dans chaque sous-réseau aux résultats des résultats du tableau [n] = Largenumber;} // Renvoie les résultats de retour du tableau;} plus grande ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]); // [34, 456, 4567, 78]La méthode ci-dessus est une solution normale, traversant le tableau et ses sous-bandes à travers deux pour les boucles:
Créer une variable de résultats pour stocker la valeur maximale traversée dans chaque sous-réseau
Créer une boucle extérieure pour traverser les tableaux externes
Créez une deuxième variable, Largenumber, pour stocker la valeur maximale. Cette valeur variable doit être placée en dehors de la boucle interne, car elle ne sera pas réaffectée
Créez une seconde pour la boucle pour itérer à travers chaque élément de la sous-bande
Une instruction IF est utilisée pour déterminer si l'élément du sous-réseau actuel est supérieur à la valeur maximale stockée dans le sous-réseau actuel. Si vrai, stockez cette valeur maximale à Largenumber.
Une fois la boucle interne terminée, la valeur maximale de chaque sous-réseau est stockée dans les résultats variables initialement déclarés
Enfin renvoyer le tableau des résultats
Après avoir retiré chaque valeur maximale dans tous les sous-réseaux, vous obtiendrez de nouveaux résultats de tableau. Pour le moment, il vous suffit de passer:
Array.prototype.max = function () {return math.max.apply ({}, this);} GregestOffour (arr) .max ();Vous pouvez obtenir la valeur maximale.
Bigoffour ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]). Max (); // 4567
Solution intermédiaire
Fonction BigOffour (arr) {// Utiliser la méthode MAP () et la fonction de rappel pour combiner les valeurs maximales dans la sous-réseau ensemble pour obtenir un nouveau tableau Retour ARR.MAP (fonction (groupe) {// Utiliser la méthode Réduire pour renvoyer la valeur maximale dans chaque sous-réseau à la réduction du tableau de groupe. prev;});});});} grossestoffour ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]); // [34, 456, 4567, 78]Utilisez la méthode array.prototype.map () pour itérer dans le tableau dans le tableau externe. Utilisez la méthode map () pour traverser le tableau et une fonction de rappel sera appelée. Dans cette fonction de rappel, chaque groupe de sous-réseau est fusionné à l'aide de la méthode Reduce () pour renvoyer la valeur à un nouveau tableau. Lorsque vous utilisez la méthode Reduce (), une fonction de rappel sera également appelée. Cette fonction de rappel ne fait qu'une seule chose, c'est-à-dire comparer les éléments de la sous-bande. Si le courant est supérieur à PREV, le courant sera renvoyé, sinon le PREV sera renvoyé et la valeur maximale dans chaque sous-réseau sera obtenue.
Comme précédemment, la valeur maximale est finalement obtenue via math.max.apply ().
La meilleure solution
Fonction BigOffour (arr) {return arr.map (function.apply.bind (math.max, null));} GregestOffour ([[1,34], [456,2,3,44,234], [4567,1,4,5,6], [34,78,23,1]]); // [34, 456, 4567, 78]Dans ce schéma, en utilisant la méthode function.bind pour créer une fonction de rappel spéciale, qui est similaire à la méthode math.max, mais il a une fonction function.prototype.Apply qui prend le tableau comme paramètre.
Itéré d'abord sur chaque élément du tableau principal, c'est-à-dire chaque sous-réseau à l'intérieur du tableau
L'utilisation de la méthode map () nécessite une fonction de rappel pour trouver la valeur maximale dans chaque tableau à l'intérieur. Vous devez créer une fonction qui permet à Math.max d'accepter le travail de tableau d'entrée. En d'autres termes, cela est très simple et fonctionne très bien, comme math.max ([9,43,20,6]); retournera la valeur maximale de 43
La méthode function.prototype.apply peut accepter les tableaux comme paramètres, mais la fonction utilise le contexte d'appel, ce qui est un peu compliqué. Par exemple, math.max.apply (null, [9,43,20,6]) appellera une méthode max.max, mais une telle méthode n'est pas facile à trouver.
Ici, un paramètre nul est transmis à la méthode function.prototype.Apply, disant à Math.max qu'il n'y a pas de contexte requis.
Parce que arr.map () nécessite une fonction de rappel, pas seulement une expression, nous fournissons une fonction dans la méthode Fonction.bind
Parce que function.prototype.apply est une méthode statique, similaire à un objet de fonction, nous pouvons l'appeler function.prototype.bind lié à function.prototype.apply. Par exemple: function.apply.bind
Son contexte peut désormais être spécifié via la fonction function.prototype.apply.bind, comme la méthode math.max dans cet exemple
Puisqu'il est intégré dans la méthode function.prototype.Apply, un contexte est requis comme premier paramètre, et ce contexte est toujours faux.
Nous passons donc Null comme deuxième paramètre à fonction.prototype.apply.bind et lions un contexte, qui est la méthode math.max
Puisque Math.Max est indépendant de tout contexte, il ignore le faux contexte de la fonction.prototype.Apply Method Call
Nous utilisons function.prototype.apply.bind (math.max, null) pour faire une nouvelle fonction accepter la valeur arr.map, comme une sous-traitage dans un tableau
Prendre la valeur maximale dans un tableau multidimensionnel
Ce qui précède utilise différentes méthodes pour extraire les valeurs maximales de la sous-réseau à partir d'un tableau bidimensionnel et reformer ces valeurs maximales dans un nouveau tableau. Si vous l'étendez, vous devez également utiliser la fonction array.prototype.max pour obtenir la valeur maximale via math.max.apply ({}, ceci) dans la fonction. Cependant, s'il ne s'agit pas d'un tableau bidimensionnel, la méthode ci-dessus ne pourra pas récupérer la plus grande valeur du tableau.
Pour obtenir la valeur maximale dans un tableau multidimensionnel, vous pouvez le combiner avec les méthodes join () et split ():
Fonction BigOffour (arr) {var newArray = arr.join (","). Split (","); return math.max.apply ({}, newArray);} GregestOffour ([12,23]); // => 23lagestoffour ([12,23, [1234,324], [345 566]]); // => 1234lagestoffour ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 1234lagestoffour ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 90890LaregestOffour ([12,23, [1234,324, [23121,90890]], [345,566, [345,78,90, [90909090,988]]]]); // => 9090909090Vous pouvez également utiliser une méthode similaire pour supprimer la valeur minimale dans un tableau multidimensionnel:
fonction saut-out (arr) {var newArray = arr.join (","). Split (","); return math.min.Apply ({}, newArray);} saut-outoffour ([12,23]); // => 12smalleroffour ([112,23, [1234,324], [345,566]]); // => 23Smalleroffour ([212,123, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 23Smalleroffour ([212,123, [1234,324, [23121,90890]], [345,566, [345,78,90]]]); // => 78Smalleroffour ([102,230, [1234,324, [23121,90890]], [345,566, [345,78,90, [90909090,988]]]]); // => 78Résumer
Dans l'article "JavaScript Apprenting Notes: Prendre des valeurs maximales et minimales dans les tableaux", math.max.apply ({}, arr) est introduit pour obtenir le plus grand nombre dans un tableau. Cet article présente comment extraire le plus grand nombre d'un tableau bidimensionnel sous différents angles, mais dans de nombreux cas, les tableaux ont également des tableaux multidimensionnels. L'article finit par introduire comment extraire la plus grande valeur d'un tableau multidimensionnel. Si vous avez plus de solutions, veuillez les partager avec nous dans les commentaires.