@Banjamin
Пишу

Как работает код?

Добрый день.
Разбирал алгоритм рандомизации массива Fisher–Yates, и встал вопрос, ниже привожу код:
const randomArr = (array)=>{
const newArr = [];
let n = array.length;
let i;

while(n){
    i = Math.floor(Math.random()*n--);
    newArr.push(array.splice(i,1)[0]);
}
return newArr
}


Если в цикле while заменить n-- на n-1 то код уходит в бесконечный цикл. Понимаю что есть разница между двумя выражениями, но в контексте работы алгоритма не могу сообразить. Если не сложно поясните.
  • Вопрос задан
  • 147 просмотров
Решения вопроса 1
lastuniverse
@lastuniverse
Всегда вокруг да около IT тем
Потому что
n-- не тоже самое что n-1
Первое уменьшает n на единицу и возвращает результат.
Второе возвращает число на еденицу меньше чем n. При этом само n остается прежним, в результате вы и получаете бесконечный цикл (ведь n не меняется)

А вот следующие выражения идентичны:
n=n-1;
n-=1;
n--;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы