20. Начинаем сортировку

Здравствуйте. Я совсем не понял логику приравнивания элементов. Кто поможет построчно объяснить логику и суть сего действия.

for (var j = currentIndex + 1; j <= usersByDay.length - 1; j++) {
if (usersByDay[j] < minValue) {
minValue = usersByDay[j];_
var swap = usersByDay[currentIndex];
usersByDay[currentIndex] = minValue;
usersByDay[j] = swap;

1 лайк

Меня тоже интересует этот вопрос

2 лайка

var usersByDay = [4, 2, 1, 3];
console.log(usersByDay);

var currentIndex = 0;
var minValue = usersByDay[currentIndex];

Для наглядности добавлю остальные куски кода. Сам я тоже новичек в JS, но попробую объяснить.

  1. В переменную var minValue = usersByDay[currentIndex];
    мы записываем значение элемента массива равное числу 4.

  2. В цикле отсчёт начинаем не с 0-го элемента массива, а с 1-го элемента массива: var j = currentIndex + 1.
    Начинаем цикл с 1-го элемента, а не с 0-го, потому что далее в цикле в условии мы будем сравнивать 1-ый элемент массива с 0-ым: if (usersByDay[j] < minValue), т.е. 2 < 4. Ведь, в переменную minValue у нас записано значение 0-го элемента массива равное 4, а в usersByDay[j] вместо j подставляется число 1, а значение 1-го элмемнта массива это число 2.

  3. Итак, мы сравнили 1-ый и 0-ой элементы массива: 2 < 4. Т.к условие верное, то теперь в переменную minValue мы записываем значение usersByDay[j], т.е. 2.

  4. Затем, в переменную swap мы сохраняем число 4, т.е. 0-ой элемент массива, чтобы его не потерять, т.к. число 4 нам пригодится, чтобы подставить его вместо 1-го элемента массива, в то время как, в будущем 1-ый элемент массива встанет на место 0-го элемента массива.

  5. Далее идёт вот этот шаг: usersByDay[currentIndex] = minValue;
    Здесь 0-ому элементу массива присваивается минимальное значение, что мы получили в результате сравнения выше в коде. Т.е 2.

  6. А здесь - usersByDay[j] = swap; Мы текущему элементу массива, т.е. 1-ому элементу, присваиваем ранее сохранённое значение 4.

Таким образом, мы меняем местами 0 и 1 элементы массива. Вроде как-то так))

5 лайков

Я тоже новичок в JS. На предыдущем шаге искали минимальный элемент. Там все понятно. Здесь повторяем алгоритм и добавляем: Если текущий элемент меньше minValue , то записываем его в minValue , а затем меняем местами значение первого элемента и текущего.

Зачем усложнять код переменной swap? Насколько я понял, чтобы поменять местами два элемента массива, нужно один из них сохранить в переменную. Она уже есть:

Цитата 3. Итак, мы сравнили 1-ый и 0-ой элементы массива: 2 < 4. Т.к условие верное, то теперь в переменную minValue мы записываем значение usersByDay[j], т.е. 2.

  1. usersByDay[j] = usersByDay[currentIndex]; // первому элементу присвоили значение 4
  2. usersByDay[currentIndex] = minValue; // нулевому элементу присвоили значение 2