javascript оператор switch не возвращает правильные значения - PullRequest
0 голосов
/ 01 августа 2020

Это часть программы для построения точек (созданных в другом месте) на прямоугольной angular сетке. Если точка выходит за пределы сетки (либо index <0, либо index> grid_length), то индекс корректируется, чтобы поместить ее в сетку. Я сделал это тремя способами:

  1. обычный js код: функция get_bounded_index () : это работает нормально
  2. тройные операторы: тройная функция () : это работает нормально
  3. операторы switch: function switch_statement () : это не удается.

Я пробовал function switch_statement ( ) с параметром grid_length и без него, безрезультатно. Извините за отсутствие номеров строк, не могу с этим разобраться. Кроме того, на консоли указаны номера строк, превышающие длину моего файла. Это периодически происходит с другими JS файлами, которые я пишу. Я тоже в неведении по этому поводу. Подскажите, пожалуйста, в чем я ошибаюсь.

function get_bounded_index(index) {
    bounded_index = index;
    if (bounded_index < 0) {
      bounded_index = index + grid_length;
    }
    if (bounded_index >= grid_length) {
      bounded_index = index - grid_length;
    }
    return bounded_index;
  }

  function ternary(index) {
    bounded_index = index;
    bounded_index < 0 ? bounded_index = index + grid_length : bounded_index = index - grid_length;
    return bounded_index;
  }

  function switch_statement(index, grid_length) {
    bounded_index = index;
    switch (index) {
      case (index < 0):
        bounded_index === index + grid_length;
        break;
      case (index > grid_length):
        bounded_index === index - grid_length;
        break;
    }
    return bounded_index;
  }

  let grid_length = 100;
  console.log(get_bounded_index(-10)); // 90 ok
  console.log(get_bounded_index(110)); // 10 ok
  console.log("__________");
  console.log(ternary(-10)); // 90 ok
  console.log(ternary(110)); // 10 ok
  console.log("__________");
  console.log(switch_statement(-10, grid_length )); // -10 implies grid_length = 0
  console.log(switch_statement(110, grid_length)); // 110 implies grid_length = 0

1 Ответ

0 голосов
/ 02 сентября 2020

Оператор switch оценивает выражение , сопоставляя значение выражения с предложением case, и выполняет операторы , связанные с этим case, а также операторы в case, которые следуют за сопоставлением case.

Это означает, что вы не можете поместить выражение в предложение case. Просто ценности. Как вы можете видеть на примерах в docs .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...