Τρεις τρόποι για να βρείτε τον μεγαλύτερο αριθμό σε έναν πίνακα χρησιμοποιώντας JavaScript

Σε αυτό το άρθρο, θα εξηγήσω πώς να λύσετε την πρόκληση του "Return Largest Numbers in Arrays " του Free Code Camp . Αυτό περιλαμβάνει την επιστροφή ενός πίνακα με τους μεγαλύτερους αριθμούς από καθεμία από τις δευτερεύουσες σειρές.

Υπάρχουν οι τρεις προσεγγίσεις που θα καλύψω:

  1. με βρόχο FOR
  2. χρησιμοποιώντας τη μέθοδο μείωση ()
  3. χρησιμοποιώντας Math.max ()

Η περιγραφή του Αλγόριθμου Πρόκληση

Επιστρέψτε έναν πίνακα που αποτελείται από τον μεγαλύτερο αριθμό από κάθε παρεχόμενη υπο-σειρά. Για απλότητα, η παρεχόμενη συστοιχία θα περιέχει ακριβώς 4 υπο-πίνακες.

Θυμηθείτε, μπορείτε να επαναλάβετε μια συστοιχία με ένα απλό για βρόχο και να αποκτήσετε πρόσβαση σε κάθε μέλος με τη σύνταξη συστοιχίας arr [i].

function largestOfFour(arr) { return arr; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); 

Παρέχονται δοκιμές

largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return an array. largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]) should return [27,5,39,1001]. largestOfFour([[4, 9, 1, 3], [13, 35, 18, 26], [32, 35, 97, 39], [1000000, 1001, 857, 1]]) should return [9, 35, 97, 1000000].

Προσέγγιση # 1: Επιστρέψτε τους μεγαλύτερους αριθμούς σε μια σειρά με έναν βρόχο για

Αυτή είναι η λύση μου, με ενσωματωμένα σχόλια που θα σας βοηθήσουν να το καταλάβετε:

 function largestOfFour(arr) { // Step 1. Create an array that will host the result of the 4 sub-arrays var largestNumber = [0,0,0,0]; // Step 2. Create the first FOR loop that will iterate through the arrays for(var arrayIndex = 0; arrayIndex < arr.length; arrayIndex++) { /* The starting point, index 0, corresponds to the first array */ // Step 3. Create the second FOR loop that will iterate through the sub-arrays for(var subArrayIndex = 0; subArrayIndex  largestNumber[arrayIndex]) { largestNumber[arrayIndex] = arr[arrayIndex][subArrayIndex]; /* FOR loop cycles arrayIndex => i subArrayIndex => j Iteration in the first array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[0][0] => 4 largestNumber[0] => 0 4 > 0? => TRUE then largestNumber[0] = 4 Second iteration: arr[0][1] => 5 largestNumber[0] => 4 5 > 4? => TRUE then largestNumber[0] = 5 Third iteration: arr[0][2] => 1 largestNumber[0] => 5 1 > 5? => FALSE then largestNumber[0] = 5 Fourth iteration: arr[0][3] => 3 largestNumber[0] => 5 3 > 5? => FALSE then largestNumber[0] = 5 Fifth iteration: arr[0][4] => FALSE largestNumber[0] => 5 largestNumber = [5,0,0,0] Exit the first array and continue on the second one Iteration in the second array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[1][0] => 13 largestNumber[1] => 0 13 > 0? => TRUE then largestNumber[1] = 13 Second iteration: arr[1][1] => 27 largestNumber[1] => 13 27 > 13? => TRUE then largestNumber[1] = 27 Third iteration: arr[1][2] => 18 largestNumber[1] => 27 18 > 27? => FALSE then largestNumber[1] = 27 Fourth iteration: arr[1][3] => 26 largestNumber[1] => 27 26 > 27? => FALSE then largestNumber[1] = 27 Fifth iteration: arr[1][4] => FALSE largestNumber[1] => 27 largestNumber = [5,27,0,0] Exit the first array and continue on the third one Iteration in the third array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[2][0] => 32 largestNumber[2] => 0 32 > 0? => TRUE then largestNumber[2] = 32 Second iteration: arr[2][1] => 35 largestNumber[2] => 32 35 > 32? => TRUE then largestNumber[2] = 35 Third iteration: arr[2][2] => 37 largestNumber[2] => 35 37 > 35? => TRUE then largestNumber[2] = 37 Fourth iteration: arr[2][3] => 39 largestNumber[2] => 37 39 > 37? => TRUE then largestNumber[2] = 39 Fifth iteration: arr[2][4] => FALSE largestNumber[2] => 39 largestNumber = [5,27,39,0] Exit the first array and continue on the fourth one Iteration in the fourth array For each iteration: arr[i][j] largestNumber[i] if arr[i][j] > largestNumber[i]? then largestNumber[i] = arr[i][j] First iteration: arr[3][0] => 1000 largestNumber[3] => 0 1000 > 0? => TRUE then largestNumber[3] = 1000 Second iteration: arr[3][1] => 1001 largestNumber[3] => 1000 1001 > 1000? => TRUE then largestNumber[3] = 1001 Third iteration: arr[3][2] => 857 largestNumber[3] => 1001 857 > 1001? => FALSE then largestNumber[3] = 1001 Fourth iteration: arr[3][3] => 1 largestNumber[3] => 1001 1 > 1001? => FALSE then largestNumber[3] = 1001 Fifth iteration: arr[3][4] => FALSE largestNumber[3] => 1001 largestNumber = [5,27,39,1001] Exit the FOR loop */ } } } // Step 4. Return the largest numbers of each sub-arrays return largestNumber; // largestNumber = [5,27,39,1001]; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Και εδώ είναι χωρίς τα σχόλιά μου:

 function largestOfFour(arr) { var largestNumber = [0,0,0,0]; for(var arrayIndex = 0; arrayIndex < arr.length; arrayIndex++) { for(var subArrayIndex = 0; subArrayIndex  largestNumber[arrayIndex]) { largestNumber[arrayIndex] = arr[arrayIndex][subArrayIndex]; } } } return largestNumber; } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Προσέγγιση # 2: Επιστρέψτε τους μεγαλύτερους αριθμούς σε μια σειρά με ενσωματωμένες λειτουργίες - με χάρτη () και μειώστε ()

Για αυτήν τη λύση, θα χρησιμοποιήσετε δύο μεθόδους: τη μέθοδο Array.prototype.map () και τη μέθοδο Array.prototype.reduce ().

  • Η μέθοδος map () δημιουργεί έναν νέο πίνακα με τα αποτελέσματα της κλήσης μιας παρεχόμενης συνάρτησης σε κάθε στοιχείο αυτού του πίνακα. Η χρήση του χάρτη θα καλέσει μια παρεχόμενη συνάρτηση επανάκλησης μία φορά για κάθε στοιχείο σε έναν πίνακα, με τη σειρά και θα κατασκευάσει έναν νέο πίνακα από τα αποτελέσματα.
  • Η μέθοδος μείωση () εφαρμόζει μια συνάρτηση έναντι ενός συσσωρευτή και κάθε τιμής του πίνακα για να τον μειώσει σε μία μόνο τιμή.

Ο τριαδικός τελεστής είναι ο μόνος χειριστής JavaScript που χρειάζεται τρεις τελεστές Αυτός ο τελεστής χρησιμοποιείται ως συντόμευση για τη δήλωση if.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

Αυτό μπορεί επίσης να διαβαστεί ως:

if (currentLargestNumber > previousLargestNumber == true) { return currentLargestNumber; } else { return previousLargestNumber; }

Αυτή είναι η λύση μου, με ενσωματωμένα σχόλια:

 function largestOfFour(mainArray) { // Step 1. Map over the main arrays return mainArray.map(function (subArray){ // Step 3. Return the largest numbers of each sub-arrays => returns [5,27,39,1001] // Step 2. Grab the largest numbers for each sub-arrays with reduce() method return subArray.reduce(function (previousLargestNumber, currentLargestNumber) { return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber; /* Map process and Reduce method cycles currentLargestNumber => cLN previousLargestNumber => pLN Iteration in the first array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 4 0 4 > 0? => TRUE 4 / Second iteration: 5 4 5 > 4? => TRUE 5 / Third iteration: 1 5 1 > 5? => FALSE / 5 Fourth iteration: 3 5 3 > 5? => FALSE / 5 Fifth iteration: / 5 returns 5 Exit the first array and continue on the second one Iteration in the second array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 13 0 13 > 0? => TRUE 13 / Second iteration: 27 13 27 > 13? => TRUE 27 / Third iteration: 18 27 18 > 27? => FALSE / 27 Fourth iteration: 26 27 26 > 27? => FALSE / 27 Fifth iteration: / 27 returns 27 Exit the first array and continue on the third one Iteration in the third array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 32 0 32 > 0? => TRUE 32 / Second iteration: 35 32 35 > 32? => TRUE 35 / Third iteration: 37 35 37 > 35? => TRUE 37 / Fourth iteration: 39 37 39 > 37? => TRUE 39 / Fifth iteration: / 39 returns 39 Exit the first array and continue on the fourth one Iteration in the fourth array For each iteration: cLN pLN if (cLN > pLN) ? then cLN else pLN First iteration: 1000 0 1000 > 0? => TRUE 1000 / Second iteration: 1001 1000 1001 > 1000? => TRUE 1001 / Third iteration: 857 1001 857 > 1001 => FALSE / 1001 Fourth iteration: 1 1001 1 > 1001? => FALSE / 1001 Fifth iteration: / 1001 returns 1001 Exit the first array and continue on the fourth one */ }, 0); // 0 serves as the context for the first pLN in each sub array }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Και εδώ είναι χωρίς σχόλια:

 function largestOfFour(mainArray) { return mainArray.map(function (subArray){ return subArray.reduce(function (previousLargestNumber, currentLargestNumber) { return (currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber; }, 0); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Προσέγγιση # 3: Επιστρέψτε τους μεγαλύτερους αριθμούς σε μια σειρά με ενσωματωμένες λειτουργίες - με χάρτη () και εφαρμόστε ()

Για αυτήν τη λύση, θα χρησιμοποιήσετε δύο μεθόδους: τη μέθοδο Array.prototype.map () και τη μέθοδο Function.prototype.apply ().

  • Η μέθοδος apply () καλεί μια συνάρτηση με δεδομένη αυτήν την τιμή και ορίσματα που παρέχονται ως πίνακας (ή αντικείμενο σαν πίνακας).

Μπορείτε να μεταβιβάσετε έναν πίνακα ορισμάτων σε μια συνάρτηση χρησιμοποιώντας τη μέθοδο apply () και η συνάρτηση θα εκτελέσει τα στοιχεία του πίνακα.

Τέτοιες συναρτήσεις είναι γνωστές ως παραλλαγές συναρτήσεων , και μπορούν να δεχτούν οποιονδήποτε αριθμό ορισμάτων αντί για ένα σταθερό.

Η συνάρτηση Math.max () επιστρέφει το μεγαλύτερο μηδέν ή περισσότερους αριθμούς και μπορούμε να περάσουμε οποιονδήποτε αριθμό ορισμάτων.

console.log(Math.max(4,5,1,3)); // logs 5

Αλλά δεν μπορείτε να περάσετε μια σειρά αριθμών στη μέθοδο όπως αυτή:

var num = [4,5,1,3]; console.log(Math.max(num)); // logs NaN

Εδώ αποδεικνύεται χρήσιμη η μέθοδος apply () :

var num = [4,5,1,3]; console.log(Math.max.apply(null, num)); // logs 5

Σημειώστε ότι το πρώτο όρισμα που εφαρμόζεται () ορίζει την τιμή " αυτό ", που δεν χρησιμοποιείται σε αυτήν τη μέθοδο, επομένως περνάτε μηδέν .

Τώρα που έχετε μια μέθοδο για να επιστρέψετε τον μεγαλύτερο αριθμό σε έναν πίνακα, μπορείτε να κάνετε βρόχο σε κάθε δευτερεύουσα σειρά με τη μέθοδο χάρτη () και να επιστρέψετε όλους τους μεγαλύτερους αριθμούς.

Αυτή είναι η λύση μου, με ενσωματωμένα σχόλια:

 function largestOfFour(mainArray) { // Step 1. Map over the main arrays return mainArray.map(function(subArray) { // Step 3. Return the largest numbers of each sub-arrays => returns [5,27,39,1001] // Step 2. Return the largest numbers for each sub-arrays with Math.max() method return Math.max.apply(null, subArray); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Και χωρίς σχόλια:

 function largestOfFour(mainArray) { return mainArray.map(function(subArray) { return Math.max.apply(null, subArray); }); } largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);

Ελπίζω να το βρήκατε χρήσιμο. Αυτό είναι μέρος της σειράς άρθρων μου «Πώς να επιλύσω τους αλγόριθμους FCC» σχετικά με τις Προκλήσεις Αλγόριθμου Free Code Camp, όπου προτείνω αρκετές λύσεις και εξηγώ βήμα-βήμα τι συμβαίνει κάτω από την κουκούλα.

Τρεις τρόποι για να επαναλάβετε μια συμβολοσειρά σε JavaScript

Σε αυτό το άρθρο, θα εξηγήσω πώς να λύσετε την πρόκληση "Επανάληψη συμβολοσειράς επανάληψη συμβολοσειράς" του FreeCodeCamp. Αυτό περιλαμβάνει…

Δύο τρόποι επιβεβαίωσης του τερματισμού μιας συμβολοσειράς σε JavaScript

Σε αυτό το άρθρο, θα σας εξηγήσω πώς να λύσετε την πρόκληση του "Confirm the Ending" του FreeCodeCamp.

Τρεις τρόποι αντιστροφής μιας συμβολοσειράς σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Reverse a String"

Τρεις τρόποι παραγοντοποίησης ενός αριθμού σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Factorialize a Number"

Δύο τρόποι για να ελέγξετε για Palindromes σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Έλεγχος για Palindromes".

Τρεις τρόποι για να βρείτε τη μεγαλύτερη λέξη σε μια συμβολοσειρά σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Βρείτε τη μεγαλύτερη λέξη σε μια συμβολοσειρά".

Τρεις τρόποι για τον τίτλο υπόθεση μια πρόταση σε JavaScript

Αυτό το άρθρο βασίζεται στο σενάριο Free Code Camp Basic Algorithm "Τίτλος Case a Sentence".

Εάν έχετε τη δική σας λύση ή οποιεσδήποτε προτάσεις, μοιραστείτε τις παρακάτω στα σχόλια.

Ή μπορείτε να με ακολουθήσετε στο Medium , Twitter, Github και LinkedIn , αμέσως αφού κάνετε κλικ στην πράσινη καρδιά παρακάτω ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Επιπρόσθετοι πόροι

  • για - MDN
  • array.length - MDN
  • μέθοδος map () - MDN
  • μέθοδος μείωσης () - MDN
  • Ternary Operator - MDN
  • μέθοδος () - MDN
  • Math.max () - MDN
  • αυτό - MDN