#javascript #syntax
#javascript #синтаксис
Вопрос:
Необязательная цепочка — это мощная функция, когда дело доходит до доступа к таким данным, как
const options = cache.[server]?.[channel]?.[service]
Теперь при записи данных нам обычно нужно сделать что-то вроде
cache[server] ??= {}
cache[server][channel] ??= {}
cache[server][channel][service] = options
Есть ли что-то вроде необязательной цепочки, которая облегчает такое назначение (возможно, в одной строке)?
Что-то вроде :
cache[server]??{}:[channel]??{}:[service]=options
В этом случае добавление {}
или []
сразу после позволило бы указать, что ожидается назначить, если значение равно нулю.
Как было предложено @Bergi, ближайший способ сделать это — написать так:
((cache[server] ??= {})[channel] ??= {})[service] = options
Комментарии:
1. В Coffeescript есть
2.
cache[server]??{}:[channel]??{}:[service]=options
— и это то, что я называю читаемым, чистым кодом3. @kinduser Синтаксис можно было бы улучшить, но он все равно был бы лучше, чем серия
if
операторов, которые создают все промежуточные объекты.4. @Justinas как это называется в Coffescript?
5. @RolandStarke Можете ли вы показать мне пример?
Ответ №1:
Вы можете использовать круглые скобки для преобразования
cache[server] ??= {}
cache[server][channel] ??= {}
cache[server][channel][service] = options
в одно выражение
((cache[server] ??= {})[channel] ??= {})[service] = options
Комментарии:
1. Хотя это не синтаксический сахар, это самый модульный способ сделать то, что я просил