Почему не срабатывает замена числа на слово?

177
21 октября 2018, 11:20

Почему не срабатывает замена числа на слово? В консоль выводится только числа от 1 до 100.

for (var i = 1; i <= 100; i++) { 
  switch (i) { 
    case ((i % 3 == 0) && (i % 5 == 0)): 
      console.log("трипять"); 
      break; 
    case (i % 3 == 0): 
      console.log("три"); 
      break; 
    case (i % 5 == 0): 
      console.log("пять"); 
      break; 
    default: 
      console.log(i); 
  } 
}

Answer 1

Потому что проверять надо не значение i, а истинность выражения в case - т.е. не switch(i), а switch(true):

for(var i=1; i<=100; i++){ 
    switch(true){ 
        case ((i%3 == 0)&&(i%5 == 0)): 
            console.log("трипять"); 
            break; 
        case (i%3 == 0): 
            console.log("три");      
            break;  
        case (i%5 == 0): 
            console.log("пять"); 
            break; 
        default: 
            console.log(i);  
        } 
    }

Answer 2

switch сравнивает значение переменной со значениями указанными в блоках case. И когда эти два значения совпадают, выполняет этот блок.

В case у вас вычисляются логические значения. И вы ожидаете, что будет выполняться блок со значением true. Значит именно это значение нужно поставить в оператор switch

for (var i = 1; i <= 100; i++) { 
  switch (true) { 
    case ((i % 3 == 0) && (i % 5 == 0)): 
      console.log("трипять"); 
      break; 
    case (i % 3 == 0): 
      console.log("три"); 
      break; 
    case (i % 5 == 0): 
      console.log("пять"); 
      break; 
    default: 
      console.log(i); 
  } 
}

А вообще код

switch (x) {
  case a: doA(); break;
  case b: doB(); break;
  default: doDef();
}

Переписывается в такой

if (x == a)
  doA();
else if (x == b)
  doA();
else
  doDef();

Или для вашего случая

if (i == ((i % 3 == 0) && (i % 5 == 0)))
  console.log("трипять");
else if (i == (i % 3 == 0))
  console.log("три");
else if (i == (i % 5 == 0))
  console.log("пять");
else
  console.log(i);

И тогда понятно, почему ваш код не работает

READ ALSO
Убрать отступы у Balloon

Убрать отступы у Balloon

Использую JavaScript API 21

161
no changes detected при миграции

no changes detected при миграции

Доброго времени суток всем!

223
Записать отчет в таблице?

Записать отчет в таблице?

Я сейчас создаю БДВопрос Есть ли смысл создать таблицу для отчетов? Отчет создается каждый месяц

203