¿Cómo puedo simplificar este código para que el nombre de propiedad largo store.user[userId].order[orderId].items solo se especifique una vez?
if (!store.user[userId].order[orderId].items) store.user[userId].order[orderId].items = new Set(); if (store.user[userId].order[orderId].items.has('apples')) store.user[userId].order[orderId].items.add('oranges');Tengo una propiedad de objeto muy larga que hace que el código sea difícil de leer. Me gustaría usar una variable como alias para simplificar el código, así:
let items = store.user[userId].order[orderId].items; if (items.has('apples')) items.add('oranges');Sin embargo, si la propiedad aún no se ha establecido, obtengo errores. Entonces necesito definir un objeto predeterminado:
let items = store.user[userId].order[orderId].items || new Set(); if (items.has('apples')) items.add('oranges'); Sin embargo, mientras esto funciona en un objeto existente, si se llamó al new Set() , todavía necesito volver a colocar la nueva instancia en el objeto largo para conservarlo:
let items = store.user[userId].order[orderId].items || new Set(); if (!store.user[userId].order[orderId].items) store.user[userId].order[orderId].items = items; if (items.has('apples')) items.add('oranges');Que tipo de derrota el propósito.
¿Hay alguna manera de que pueda usar esta variable como un alias para la propiedad más larga, mientras proporciono y establezco un valor predeterminado si la propiedad aún no existe, pero solo necesito especificar el nombre largo de la propiedad una vez ?
Si bien mi caso de ejemplo aquí es un poco artificial, me encuentro mucho con esta situación cuando estoy recorriendo datos. El mismo código se ejecuta en cada iteración, pero a medida que encuentra diferentes datos entrantes, necesita agregar estructuras existentes o crearlas si aún no existen, por lo que crear todas las propiedades por adelantado no es realmente una opción, ya que no No sabrá qué propiedades crear hasta que esté en medio del procesamiento de los datos.
En caso de que esté accediendo a un objeto que podría estar anidado dentro de opcional indefinido, use este método.
Para establecer una fusión nula (ponga un valor si la variable es nula o indefinida) use esto:
let a = bla.bla.mightByNullOrUndefined?.obj?.nested a ??= somethingElse