У меня возникла проблема с использованием функции внутри цикла 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 останавливается после возврата.
Я прошу разрешения, как мне закончить, или что я должен использовать вместо возврата, поэтому я не буду прерывать цикл, и функция продолжит итерацию по остальным номерам в массиве, и максимальная переменная изменится, пока не будет находит наибольшее число в массиве?
Вам нужно выполнить итерацию до конца, потому что вы не знаете, был ли последний элемент больше, чем найденное значение раньше.
Переместите возвращаемое значение в конец функции и используйте локальную переменную 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));
Другой способ найти максимум - это распространение в 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));
Лучше сделать функцию, которая вернет максимальный файл вместо изменения какого-либо глобального 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
для поиска максимального значения.
Math.max(max, currentNumber);
вместо трина.