@nickerlan

Красивые каскады условий в JS?

Я написал кусок кода и плююсь от того, насколько он противный.
Как сделать лучше?

var token = ""
var cook=cookie.parse(document.cookie)
if (cook&&cook.ptq) token=cook.ptq;
 if (token)
{
   axios.get(BACKEND_URL+'/complete',{params:{
     token
   }}).then(d=>d.data).then(console.log)
}


Тут есть два момента.
1. Во-первых, я хочу избавиться как-то от цепочек условий
Хочу писать выражения в духе cookie.parse(document.cookie).ptq, а то и более к сложные каскады свойств a.b.c.d.e вызывать без if (a && a.b && a.b.c && a.b.c.d) { }
Слышал что какой-то костыль на эту тему есть в lodash, не уверен что достаточно изящный.

2. Во-вторых, я хочу найти более изящный способ прокидывать внутрь if значение выражения которое стояло в условии. Задавать переменную, проверять ее, потом использовать внутри эту переменную вызывает эстетическую боль:

var complicatedObject = (...) //какое-то длинное выражение. Поиск какого-нибудь значения в выборке например.
if (complicatedObject.key=="someValue")
{
   doSmth(complicatedObject)
}


Есть ли какие-то штуки в духе примера ниже?

(...someComplicatedExpression...)
.if (v=>v.key=='someValue')
.then(v=>{ doSmth(v) })
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ответы на вопрос 1
Robur
@Robur
Знаю больше чем это необходимо
JS не самый лаконичный.
Есть приемы чтобы сократить код, но это нормально если вы пилите мелкие проекты которые и проектом назвать сложно.

например
token && axios.get(...)
не делайте так.

вместо if (cook&&cook.ptq) token=cook.ptq; можно написать var token = cook && cook.ptg || null
так можно.

в целом - лучше писать более структурировано, чем более коротко.

1) есть костыли но будет только хуже. пишите свои обертки под конкретные случаи и весь шум прячьте туда
2) ничего не понятно. Если у вас условие прописано в коде - то вам не нужно ничего "прокидывать" - у вас уже и так понятно что оно выполнилось что чему равно внутри - просто пишете код исходя из этого.
Ответ написан
Ваш ответ на вопрос

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

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