Рубрики
Без рубрики

Три способа вы можете найти наибольшее количество в массиве с использованием JavaScript

В этой статье я собираюсь объяснить, как решить бесплатный кодовый лагерь «Вернуть наибольшее количество чисел в массивах». Это включает в себя возврат массива с самым большим количеством из каждой из подразделений. Существуют три подхода, я охвативших: с помощью для легирования уменьшения (

Автор оригинала: FreeCodeCamp Community Member.

В этой статье я собираюсь объяснить, как решить бесплатные кодовые лагеря « вернуть наибольшее количество в массивах » вызов. Это включает в себя возврат массива с самым большим количеством из каждой из подразделений.

Есть три подхода, которые я охвачу:

  1. с A для петли
  2. Использование метода Уменьша ()
  3. используя math.max ()

Описание проблем алгоритма

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 < arr[arrayIndex].length; subArrayIndex++) {
    /* The starting point, index 0, corresponds to the first sub-array */
       
       if(arr[arrayIndex][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 < arr[arrayIndex].length; subArrayIndex++) {
       if(arr[arrayIndex][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.Prototye.reduce ().

  • карта () Метод создает новый массив с результатами вызова предоставленной функции на каждом элементе в этом массиве. Используя карту, позвонит функцию предоставленного обратного вызова только один раз для каждого элемента в массиве, в порядке, и создает новый массив из результатов.
  • Уменьшить () Метод применяет функцию на фоне аккумулятора и каждое значение массива, чтобы уменьшить его в одно значение.

Тернарный оператор является единственным оператором 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 () и метод функции. Прототип.

  • Применить () Метод вызывает функцию с заданным этим значением и аргументами, предусмотренными в качестве массива (или на массивом объекте).

Вы можете пройти массив аргументов в функцию, используя Применить () Метод и функция выполнит элементы в массиве.

Такие функции известны как Вариадические функции И они могут принять любое количество аргументов вместо фиксированного.

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

Это где Применить () Метод оказывается полезным:

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

Обратите внимание, что первый аргумент для Применить () Устанавливает значение « это «Не используется в этом методе, поэтому вы проходите null Отказ

Теперь, когда у вас есть метод, чтобы вернуть наибольшее количество в массиве, вы можете включить в каждую подшипцу с помощью карта () Метод и вернуть все наибольшее количество.

Вот мое решение, с встроенными комментариями:

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

Я надеюсь, что вы нашли это полезным. Это является частью моего «Как решить серию статей« Как решить фкКК-алгоритмы ».

Три способа повторить строку в JavaScript в этой статье, я объясню, как решить «Повторить строку» FreeCodeCamp. Это связано с …

Два способа подтвердить окончание строки в JavaScript в этой статье, я объясню, как решить «подтвердить« подтвердить концовку ».

Три способа обратить вспять строку в артикул JavaScriptThits основаны на бесплатном кодовом лагере основных алгоритма сценариев «обратная строка»

Три способа активизировать число в артикул JavaScriptTishis основано на бесплатном кодовом лагере основных алгоритма сценариев «Factorialize ряд»

Два способа проверить палиндром в JavaScript Эта статья основана на бесплатном кодовом лагере основных алгоритма сценариев «Проверка на палиндромы».

Три способа найти самое длительное слово в строке в JavaScript Эта статья основана на бесплатном кодовом лагере основных алгоритма сценариев «Найти самое длинное слово в строке».

Три способа к названию.

Если у вас есть собственное решение или какие-либо предложения, поделитесь их ниже в комментариях.

Или вы можете следовать за мной на Средний , Twitter , Github и LinkedIn , сразу после нажатия зеленого сердца ниже 😉

# StaySurious, # KeepOnhacking & # MasteithiThappen!

Дополнительные ресурсы