Как завершить функцию в JavaScript без возможности возврата

1

У меня возникла проблема с использованием функции внутри цикла for внутри. Сначала посмотрите на код, пожалуйста:

let list1 = [4168,3925,858,2203,440,185,2886,160,1811,4272,4333,2180,174,157,361,1555];

let max = 0;

function maximum(listNumb1) {
	for (let i = 0; i < listNumb1.length; i++) {
		if (listNumb1[i] > max) {
			max = listNumb1[i];
			return max;
		}
	}
}

console.log(maximum(list1));

Хорошо, я пытаюсь сделать функцию, которая найдет наибольшее число в массиве выше. Я сделал это без функции, и код работает, но когда я хочу сделать функцию, поэтому я могу использовать ее с несколькими массивами, я застреваю, и я не получаю желаемый результат.

Я знаю, где моя проблема. Это возвратная часть. Его остановка кода от выполнения дальше, и я получаю первое число массива в качестве вывода, потому что цикл for останавливается после возврата.

Я прошу разрешения, как мне закончить, или что я должен использовать вместо возврата, поэтому я не буду прерывать цикл, и функция продолжит итерацию по остальным номерам в массиве, и максимальная переменная изменится, пока не будет находит наибольшее число в массиве?

Теги:
for-loop
function
return

3 ответа

2

Вам нужно выполнить итерацию до конца, потому что вы не знаете, был ли последний элемент больше, чем найденное значение раньше.

Переместите возвращаемое значение в конец функции и используйте локальную переменную max для сохранения временного максимального значения.

Хорошая идея - начать с первого элемента массива как значения max и запустить итерацию из индекса 1.

function maximum(array) {
    var max = array[0],
        i;

    for (i = 1; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
        }
    }
    return max;
}

let list1 = [4168, 3925, 858, 2203, 440, 185, 2886, 160, 1811, 4272, 4333, 2180, 174, 157, 361, 1555];

console.log(maximum(list1));
  • 0
    Хорошо, большое спасибо :) Я исправляю это.
0

Другой способ найти максимум - это распространение в Math # max:

const list1 = [4168,3925,858,2203,440,185,2886,160,1811,4272,4333,2180,174,157,361,1555];

const maximum = (arr) => Math.max(...arr);

console.log(maximum(list1));
0

Лучше сделать функцию, которая вернет максимальный файл вместо изменения какого-либо глобального var.

Вы можете сделать что-то вроде этого:

let list1 = [4168, 3925, 858, 2203, 440, 185, 2886, 160, 1811, 4272, 4333, 2180, 174, 157, 361, 1555];


function findMax(list) {
  return list.reduce((currentMax, currentNumber) => {
    return Math.max(currentNumber, currentMax);
  }, 0);
}

console.log(findMax(list1));

Эта функция использует Array.reduce для поиска максимального значения.

  • 0
    Вы можете использовать Math.max(max, currentNumber); вместо трина.
  • 0
    Вы правы:] будем обновлять

Ещё вопросы

Сообщество Overcoder
Наверх
Меню