En mi componente angular, estoy definiendo un objeto Javascript como

myObj = {
        "option": ["valid"],
        "cities": [
          "London",
          "Paris",
          "Rome"
        ],
        "routes": [{
          "section": 'option1',
          "class": true
        }],
        "def": [
          {
            "name": "name1",
            "attributes": [
              "test"
            ]
          }
        ]
      }

Ahora, según una condición, quiero incluir o excluir la sección 'rutas'.

Entonces, actualmente estoy haciendo así

if(somecondition) {
   myObj = {
        "option": ["valid"],
        "cities": [
          "London",
          "Paris",
          "Rome"
        ],
        "routes": [{
          "section": 'option1',
          "class": true
        }],
        "def": [
          {
            "name": "name1",
            "attributes": [
              "test"
            ]
          }
        ]
      }
} else {
   myObj = {
        "option": ["valid"],
        "cities": [
          "London",
          "Paris",
          "Rome"
        ],
        "def": [
          {
            "name": "name1",
            "attributes": [
              "test"
            ]
          }
        ]
      }
}     

Quería verificar si hay una mejor manera de lograr esto, ya que es una duplicación de código y, a medida que aumentan las condiciones, esto ya no sería mantenible.

0
swati 31 oct. 2017 a las 09:57

4 respuestas

La mejor respuesta

Pruebe lo siguiente en su lugar:

myObj = {
        "option": ["valid"],
        "cities": [
          "London",
          "Paris",
          "Rome"
        ],
        "def": [
          {
            "name": "name1",
            "attributes": [
              "test"
            ]
          }
        ]
      }

if(somecondition) {
   myObj.routes = [{
          "section": 'option1',
          "class": true
        }]
}   

Defina el objeto antes y agregue routes según la condición.

1
mega6382 31 oct. 2017 a las 07:00

Puede eliminar una propiedad de un objeto de esa manera:

delete myObj.routes;

O

delete myObj['routes'];

Es esto lo que estás buscando ?

1
Antikhippe 31 oct. 2017 a las 06:59

Puedes probar el siguiente código. Aquí, si no se cumple la condición, simplemente puede eliminar rutas del objeto. Espero que sea de ayuda!

 myObj = {
            "option": ["valid"],
            "cities": [
              "London",
              "Paris",
              "Rome"
            ],
            "routes": [{
              "section": 'option1',
              "class": true
            }],
            "def": [
              {
                "name": "name1",
                "attributes": [
                  "test"
                ]
              }
            ]
          };

        if(!somecondition) {
          delete myObj.routes;
        }
0
Tavish Aggarwal 31 oct. 2017 a las 07:00

Simplemente agregando la propiedad routes más tarde según su condición

myObj = {
  "option": ["valid"],
  "cities": [
    "London",
    "Paris",
    "Rome"
  ],
  "def": [{
    "name": "name1",
    "attributes": [
      "test"
    ]
  }]
};

if(somecondition) {
   myObj.routes = [{
       "section": 'option1',
       "class": true
   }];
}
0
gurvinder372 31 oct. 2017 a las 07:01