@Faha1998
Full stack

If считывает все за раз в цикле(JS), что делать?

Есть массив с цифрами
3 2 1 0 0
я хочу что бы при каждом равенстве переменной 0, декрементировалась другая переменная
function compareNumeric(a, b) {
  if (a > b) return 1;
  if (a < b) return -1;
}
var p = [3,2,1,0,0];
p = p.sort(compareNumeric);
var d = 5, n = 5;
var l = 0;
for(var g=p[l];l<n && d > 0;l++){
	if(g == 0){
		d--;
	}

}

изначально d = 5; как видно 0 встречается только 2 раза, и вроде он должен выводить 3, но он продолжает декрементировать до 0
Прошу укажите на ошибку,вообще не вижу в чем проблема
  • Вопрос задан
  • 228 просмотров
Решения вопроса 2
mmmaaak
@mmmaaak
ну, как я вижу, в первой части объявления цикла задаются начальные условия, они не пересчитываются каждый раз при итерации цикла, соответственно у вас g всегда равно p[l], на тот момент l == 0, соответственно g == p[0] (что тоже 0), поэтому пять раз срабатывает тело цикла, g всегда равно 0 -> d декрементится до нуля и цикл останавливается. Рекомендую объявлять цикл более классически:
for(var i = 0; i < n && d > 0; i++) {
   var g = p[i];
  ...
}
Ответ написан
"var g=p[l]" происходит только 1 раз
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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