Задать вопрос
  • Работа с массивом JS. Как реализовать обратный ход?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вы не учли приоритеты операций при вычислении условий.
    Ваше третье условие выглядит как
    (step == undefined || step == null || (step == 0 && start < end))
    Соответственно, при вычислении получаете true || true || (false && false), что даёт true и третье условие срабатывает.
    Укажите явно приоритет операций.
    Современный вариант решения
    const range = (start, end, step = 1) => {
      if (step === 0 || isNaN(Number(step))) {
        throw new Exception('Неверное значение step');
      }
      if (start < end && step < 0 || start > end && step > 0) {
        step = -step;
      }
      const n = Math.floor((end - start) / step) + 1;
      return Array(n).fill(1).map((v, i) => start + step * i);
    }
    
    console.log(range(10, 1));
    // Array(10) [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]
    Ответ написан
    4 комментария