Тернарный оператор Javascript с двумя истинными (?) Условными операторами - PullRequest
0 голосов
/ 27 февраля 2019

Может кто-нибудь помочь заменить?ПОТОМ в коде ниже, пожалуйста?

return e = this.checked ? i - n > 0 ? 0 : i - n < 10 ? 10 : i - n : i - n < 0 ? 10 : i - n > 10 ? 0 : 10 + i - n

Меня особенно смущает?с последующим другим?в начале выписки return e = this.checked ? i - n > 0 ? 0 ......Что это значит?

Спасибо

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Чтобы сделать его более читабельным, вы всегда можете добавить круглые скобки в свой код как

return e = this.checked ? ( (i - n > 0 )? 0 : (i - n < 10 ? 10 : i - n ) ) : ( (i - n < 0) ? 10 : (i - n > 10 ? 0 : 10 + i - n) )

или разделить на отдельные части, как ответ @Nick Parsons.

0 голосов
/ 27 февраля 2019

Это может быть полезно, если вы разделите свою троицу на отдельные части.По сути, он имеет такой базовый состав:

condition ? a : b

Здесь a будет выполняться, если condition оценивается как true, и b будет запускаться, если оно оценивается как false.

Итак, заключение в скобки вокруг ваших отдельных троичных операторов может помочь разобраться.

return e = this.checked ? (i - n > 0 ? 0 : (i - n < 10 ? 10 : i - n)) : (i - n < 0 ? 10 : (i - n > 10 ? 0 : 10 + i - n))

Так что здесь:

  • condition is this.checked

  • a is (i - n > 0 ? 0 : (i - n < 10 ? 10 : i - n))

  • b is (i - n < 0 ? 10 : (i - n > 10 ? 0 : 10 + i - n))

Или, возможно, вам будет проще понять, если вы преобразуете его в выражение if, например:

if (this.checked) {
  if (i - n > 0) {
    return 0
  } else {
    if (i - n < 10) {
      return 10;
    } else {
      return i - n;
    }
  }
} else {
  if (i - n < 0) {
    return 10;
  } else {
    if (i - n > 10) {
      return 0;
    } else {
      return 10 + i - n;
    }
  }
}
0 голосов
/ 27 февраля 2019

Вставляя скобки и отступы, ваш код эквивалентен:

return e = this.checked
? (
  i - n > 0
  ? 0
  : (
    i - n < 10
    ? 10
    : i - n
  )
)
: (
  i - n < 0
  ? 10
  : (
    i - n > 10
    ? 0
    : 10 + i - n
  )
);

Короче говоря, внутри первого или второго выражения вы можете вложить дополнительные троичные операторы, поскольку они разрешаются в выражениятоже - хотя это не значит, что это хорошая идея, она совершенно нечитаема.

Использование if-else и этого инструмента :

if (this.checked) {
  if (i - n > 0) {
    return 0
  } else {
    if (i - n < 10) {
      return 10
    } else {
      return i - n
    }
  }
} else {
  if (i - n < 0) {
    return 10
  } else {
    if (i - n > 10) {
      return 0
    } else {
      return 10 + i - n
    }
  }
}
...