Используйте условный оператор, чтобы выбрать между различными циклами для в Javascript - PullRequest
0 голосов
/ 08 октября 2018

В зависимости от определенного условия, я хочу, чтобы один из двух различных циклов for выполнялся.Поэтому в приведенном ниже примере я хочу, чтобы console.log возвращал нисходящие числа, если a> b, и восходящие числа, если b> a.Я никоим образом не был удивлен, что это не сработало, но это дает вам представление о том, что мне нужно.

for (if (a > b) {(i = 2; i > 0; i--)} else {(i = 0; i < 2; i++)} {
console.log(i);
};

Очевидно, я мог бы обойти эту проблему, если бы if-else выбирал между двумя полными и отдельными циклами, каждый со своим собственным блоком кода console.log (i), но в случае, с которым я имею дело,это повлечет за собой дублирование огромного количества кода.

Ответы [ 5 ]

0 голосов
/ 08 октября 2018

jsfiddle

function choose(a, b) {
  if (a > b) {
    for (let i = 2; i >= 0; i--) {
      console.log(i);
    }
  } else {
    for (let i = 0; i <= 2; i++) {
      console.log(i);
    }
  }
}

choose(2, 4);
0 голосов
/ 08 октября 2018

Просто попробуйте обернуть его в такую ​​функцию:

function loop(a, b) {
  if (a > b) {
    for (i = 2; i > 0; i--) {
      console.log(i);
    }
  } else {
    for (i = 0; i < 2; i++) {
      console.log(i);
    }
  }

}


loop(5,4);
loop(4,5);
0 голосов
/ 08 октября 2018

Я бы перевернул это так: сначала сделай оператор if, затем цикл.

if(a > b){
  for(let i = 2; i > 0; i--) console.log(i)
} else {
  for(let i = 0; i < 2; i++) console.log(i)
}
0 голосов
/ 08 октября 2018

Вы можете поместить тело цикла в функцию, и на каждой итерации обоих циклов вызывать эту функцию.Также обратите внимание, что в скобках for loop } не должно быть точек с запятой:

const a = 4;
const b = 5;

if (a > b) {
  for (let i = 2; i > 0; i--) {
    loop(i);
  }
} else {
  for (i = 0; i < 2; i++) {
    loop(i);
  }
}
function loop(i) {
  console.log(i);
}
0 голосов
/ 08 октября 2018
 for(let i = a > b ? 2 : 0 ; a > b ? i > 0 : i < 2; a > b ? i-- : i++)
   console.log(i);

Вы должны переместить условие в каждое выражение.Или переместите тело в его собственную функцию:

 function body(i) {
   console.log(i);
 }

 if (a > b) {
   for(i = 2; i > 0; i--) body(i);
 } else {
   for(i = 0; i < 2; i++) body(i);
}

Или функциональным способом:

 const maybe = (condition, op) => arg => condition ? op(arg) : arg;
 const range = (start, end) => Array.from({ length: end - start }, (_, i) => start + i);

maybe(a > b, it => it.reverse())(range(0, 2)).forEach(console.log);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...