Поиск максимального значения в массиве вложенных массивов

#javascript #arrays #algorithm #max

#javascript #массивы #алгоритм #макс

Вопрос:

 function largestOfFour(arr) {
  let newArr = [];
  let max = 0;
  for(let i = 0; i<arr.length;i  ){
      for(let j = 0; j<arr[i].length; j  ){
          if(arr[i][j]>max){
            max = arr[i][j];
            console.log(max);
            newArr.push(max);
          }
      }
      
  }
  return newArr;
}
  

Здравствуйте, я пишу код для поиска максимального значения в массиве вложенных массивов, и мне требуется добавить это максимальное значение в новый массив. Мой код приведен выше. Проблема в том, что мой код помещает каждое значение, превышающее максимальное, в новый массив. Когда я просто хочу получить истинное максимальное значение без использования функции Math.max. Я считаю, что это происходит потому, что у меня нет способа обновить максимальное значение при нахождении нового максимального значения. Некоторые рекомендации были бы очень полезны

Комментарии:

1. у вас есть какие-то данные и желаемый результат?

2. Помещается newArr.push(max); после завершения внутреннего цикла for.

3. [[1,2,3],[5,6],[7]].map(a => Math.max(...a))

4. @epascarello, …» без использования Math.max »

5. @NinaScholz следовательно, почему не ответ. Без max [[1,2,3],[5,6],[7]].map(a => a.reduce((max, n) => max > n ? max : n, a[0]))

Ответ №1:

Инициализируйте max во внешнем цикле ( i ) с -Infinity помощью (наименьшего «доступного» числа), затем сравните и обновите его во внутреннем цикле, но нажимайте его только после завершения внутреннего цикла:

 function largestOfFour(arr) {
  const newArr = [];
  for (let i = 0; i < arr.length; i  ) {
    let max = -Infinity;
    for (let j = 0; j < arr[i].length; j  ) {
      if (arr[i][j] > max) {
        max = arr[i][j];
      }
    }

    newArr.push(max);
  }
  return newArr;
}

const result = largestOfFour([[4, 3, 2, 1], [1, 2, 3, 4], [500, 600, 400], [300, 1000, 700]]);

console.log(result);  

Ответ №2:

Вы можете сохранить первое значение в качестве начального значения для max и выполнить итерацию со второго индекса.

Позже вставьте максимальное значение вложенного массива в результирующий массив.

 function largestOfFour(arrays) {
    const maxValues = [];
    for (let [max, ...array] of arrays) {
        for (const value of array) if (max < value) max = value;
        maxValues.push(max);
    }
    return maxValues;
}

console.log(largestOfFour([[3, 2, 1, 7], [2, 6, 4, 9], [2, 2, 1, 1], [4, 3, 6, 7]]));  

Комментарии:

1. Неплохо. Вы выполняете деструкцию в for…of ( [first, ...array] ), а затем вы также можете преобразовать внутренний цикл в for…of .

2. профессиональный ответ, КАК

Ответ №3:

Из вашего описания проблемы я могу понять, что вы хотите получить максимальное значение из подмассивов массива. В этой ситуации вам не нужно использовать newArr.push(max) внутри блока IF . Вы можете использовать эту строку после завершения двух вложенных циклов. Затем вы используете newArr.push(max); А затем возвращаете newarr.

Комментарии:

1. Объясните больше на примерах. он новый пользователь