@Fdrsmrdv

Как красиво записать присвоение на js?

Можно ли как то изящно записать следующий код:

let req = //объект, но ключи нам не известны       
req.query = req.query || {};
req.query.where = req.query.where || {};
req.query.where.profile = 1


Если мы напрямую попробуем установить req.query.where.profile = 1 и req.query будет не объект, то вернется ошибка.
  • Вопрос задан
  • 225 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
есть всякие костыли модули для этого. Например, sindresorhus/dot-prop

Мой вариант на коленке:
const setPropChain = (obj, path, value) => {
  path.split('.').reduce((acc, c, i, arr) => {
    if (!acc.hasOwnProperty(c)) acc[c] = {};
    if (typeof acc[c] !== "object") throw "Not an object prop " + c;
    if (i === arr.length - 1) acc[c] = value;
    return acc[c];
  }, obj);
  return obj;
}

// использование:
setPropChain({"test": 0}, "make.some.noise", "habr")

Результат:
{
  "test": 0,
  "make": {
    "some": {
      "noise": "habr"
    }
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
joeberetta
@joeberetta Куратор тега JavaScript
Читай: https://epdf.pub/google-for-dummies.html
С выходом ES2020 можно теперь проверять наличие свойства более лаконичным способом
req.query?.where // если свойство query у объекта req найдено
Ответ написан
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
((req.query || (req.query = {})).where || (req.query.where = {})).profile = 1;

или
const {query = (req.query = {})} = req;
const {where = (query.where = {})} = query;
where.profile = 1;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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