Tres formas de encontrar el número más grande en una matriz usando JavaScript

En este artículo, voy a explicar cómo resolver el desafío "Devolver números más grandes en matrices " de Free Code Camp . Esto implica devolver una matriz con los números más grandes de cada una de las submatrices.

Hay tres enfoques que cubriré:

  1. con un bucle FOR
  2. usando el método reduce ()
  3. usando Math.max ()

Descripción del desafío del algoritmo

Devuelve una matriz que consta del número más grande de cada submatriz proporcionada. Para simplificar, la matriz proporcionada contendrá exactamente 4 submatrices.

Recuerde, puede iterar a través de una matriz con un bucle for simple y acceder a cada miembro con la sintaxis de matriz arr [i].

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

Casos de prueba proporcionados

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

Enfoque n. ° 1: devolver los números más grandes de una matriz con un bucle for

Esta es mi solución, con comentarios incrustados para ayudarlo a comprenderla:

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

Y aquí está sin mis comentarios:

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

Enfoque n. ° 2: devolver los números más grandes en una matriz con funciones integradas, con map () y reduce ()

Para esta solución, utilizará dos métodos: el método Array.prototype.map () y el método Array.prototype.reduce ().

  • El método map () crea una nueva matriz con los resultados de llamar a una función proporcionada en cada elemento de esta matriz. El uso de map llamará a una función de devolución de llamada proporcionada una vez para cada elemento de una matriz, en orden, y construirá una nueva matriz a partir de los resultados.
  • El método reduce () aplica una función contra un acumulador y cada valor de la matriz para reducirlo a un solo valor.

El operador ternario es el único operador de JavaScript que toma tres operandos. Este operador se utiliza como atajo para la instrucción if.

(currentLargestNumber > previousLargestNumber) ? currentLargestNumber : previousLargestNumber;

Esto también se puede leer como:

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

Aquí está mi solución, con comentarios incrustados:

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

Y aquí está sin comentarios:

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

Enfoque n. ° 3: devuelva los números más grandes de una matriz con funciones integradas, con map () y aplique ()

Para esta solución, utilizará dos métodos: el método Array.prototype.map () y el método Function.prototype.apply ().

  • El método apply () llama a una función con un valor dado y argumentos proporcionados como una matriz (o un objeto similar a una matriz).

Puede pasar una matriz de argumentos a una función mediante el método apply () y la función ejecutará los elementos de la matriz.

Estas funciones se conocen como funciones variadas y pueden aceptar cualquier número de argumentos en lugar de uno fijo.

La función Math.max () devuelve el mayor de cero o más números, y podemos pasar cualquier número de argumentos.

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

Pero no puede pasar una matriz de números al método de esta manera:

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

Aquí es donde el método apply () resulta ser útil:

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

Tenga en cuenta que el primer argumento para aplicar () establece el valor de ' esto ', no se utiliza en este método, por lo que pasa nulo .

Ahora que tiene un método para devolver el número más grande en una matriz, puede recorrer cada submatriz con el método map () y devolver todos los números más grandes.

Aquí está mi solución, con comentarios incrustados:

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

Y sin comentarios:

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

Espero que hayas encontrado esto util. Esto es parte de mi serie de artículos “Cómo resolver algoritmos de FCC” sobre los desafíos de algoritmos de Free Code Camp, donde propongo varias soluciones y explico paso a paso lo que sucede bajo el capó.

Tres formas de repetir una cadena en JavaScript

En este artículo, explicaré cómo resolver el desafío "Repetir una cadena, repetir una cadena" de freeCodeCamp. Esto involucra…

Dos formas de confirmar el final de una cadena en JavaScript

En este artículo, explicaré cómo resolver el desafío "Confirmar el final" de freeCodeCamp.

Tres formas de invertir una cadena en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Reverse una cadena"

Tres formas de factorializar un número en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Factorializar un número"

Dos formas de buscar palíndromos en JavaScript

Este artículo se basa en el Scripting del algoritmo básico de Free Code Camp "Comprobar palíndromos".

Tres formas de encontrar la palabra más larga de una cadena en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp "Encuentra la palabra más larga en una cadena".

Tres formas de poner un título a una oración en JavaScript

Este artículo se basa en la secuencia de comandos del algoritmo básico de Free Code Camp “Título de caso una oración”.

Si tiene su propia solución o alguna sugerencia, compártala a continuación en los comentarios.

O puedes seguirme en Medium , Twitter, Github y LinkedIn , justo después de hacer clic en el corazón verde a continuación ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Recursos adicionales

  • para - MDN
  • array.length - MDN
  • método map () - MDN
  • método reduce () - MDN
  • Operador ternario - MDN
  • método apply () - MDN
  • Math.max () - MDN
  • esto - MDN