Задать вопрос
Tishaa
@Tishaa

Какая логика у перебора массива таким способом?

есть массив, функия ищет минимальное число и выдаёт его нажав на кнопку, у меня вопрос такой
for перебирает весь массив но каким образом, вот хочу понять последовательность
в данном примере
let min = 12 по факту у нас условие если arr[i] меньше 12 то let min перезаписывается НО, i у нас начинается с 0, так почему он перезаписывает на 3 а не на 0, 1 или 2, они же тоже меньше 12, не понимаю, обьясните

let mas = [12, 5, 8, 20, 3, 16];
function getMin(arr){
    let min = arr[0];
    for (i=0;i < arr.length;i++){
        if(arr[i] < min){
            min = arr[i];
        }
    }
    return min;
}

minBtn.onclick = function (){
    let min = getMin(mas);
    sMin.textContent = min;
}
  • Вопрос задан
  • 216 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
i — это индекс массива — номер позиции в нём, считая от 0.
arr[i]значение, которое лежит в массиве arr в позиции i.
ещё проще
Массив представьте как ряд одинаковых коробочек, юпронумерованных от 0 до N.
В коробочках что-то лежит. Обратиться к коробку можно по имени массива и номеру ячейки: arr[4] например – это пятая по счету коробка, т.к. счет идёт от 0.


Последовательность получается примерно такая:
min = 12;

i = 0; arr[i] = 12; arr[i] меньше min? НЕТ. идём дальше
i = i + 1
i = 1; arr[i] = 5; arr[i] меньше min? ДА. min становится 5; идём дальше
i = i + 1
i = 2; arr[i] = 8; arr[i] меньше min? НЕТ. идём дальше
i = i + 1
...
i = 4; arr[i] = 3; arr[i] меньше min? ДА. min становится 3; идём дальше
...
for закончил работу, min так и остался равным 3
Ответ написан
Комментировать
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
i у нас 0. но сравнивается то arr[i], т.е arr[0]

на 1 итерации будет 12 < 12 => false
на 2 итерации будет 5 < 12 => true => min = 5
на 3 итерации будет 8 < 5 => false
на 4 итерации будет 20 < 5 => false
на 5 итерации будет 3 < 5 => true => min = 3
т.е. на 6 итерации будет 16 < 3 => false
Ответ написан
Комментировать
VoidVolker
@VoidVolker Куратор тега JavaScript
Dark side eye. А у нас печеньки! А у вас?
Во-первых, вы путаете индекс массива и значение по этому индексу. Индекс - номер значения в массиве, а сравнение происходит только значений.
Кроме того, логика тут следующая: нам надо пройтись по всему массиву и найти минимальное значение, а функция вычисления минимального значения требует два аргумента. С чем и как сравнивать первый элемент массива, ведь он только первый? Это можно сделать только со вторым элементом и так до самого конца, ведь последний элемент массива будет сравниваться с минимальным элементом из предыдущих итераций. Добавлять дополнительную проверку в тело цикла - добавлять эту же проверку для всех итераций, а первый элемент в списке только один. Поэтому логично для первой итерации подготовить первый элемент списка для сравнения до начала цикла, а итерацию прохода по списку начинать со второго элемента. В приведённом данном коде как раз тут ошибка: цикл начат с первого элемента и происходит сравнение первого элемента с самим собой на первой итерации, а уже только потом идёт реальная работа. Правильнее будет следующее решение:
function getMin(arr){
    if (arr.length == 0) { return Number.POSITIVE_INFINITY } // Делаем как в Math.min()
    let min = arr[0];
    for (i=1;i < arr.length;i++){
        if(arr[i] < min){
            min = arr[i];
        }
    }
    return min;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Khetag_d
Логика в том что вы находите минимальное число в массиве (тоесть берём первый элемент массива , сохраняем его в переменную, и сравниваем его с следующим , если следующий меньше , то перезаписываем переменную )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы