Mam jeden formularz i otrzymam wartości z danych wejściowych. Po kliknięciu przycisku tworzę jeden obiekt, jak poniżej,

let data = filter : {
    metadata : {
        name: apple,
        type: fruits
    },
    match_attributes: {
        value : code_1
    }
}

Tutaj muszę usunąć obiekt „match_attributes”, jeśli klucz „value” jest pusty. Mój oczekiwany wynik będzie taki jak poniżej,

let data = filter : {
    metadata : {
        name: apple,
        type: fruits
    }
}

Próbowałem coś takiego, ale nie zadziałało,

    let test = {};
            if(this.getValue) {
             test =   match_attributes : {
                    value : this.getValue
                }
            }


filter : {
match_metadata : {
    name: this.name,
    type: this.type
},
test
}

Moje wyjście:

let data = filter : {
        metadata : {
            name: this.fruitName,
            type: this.fruitType
        },
        { }
    }

Czy w ogóle można to zrobić. Twoje zdrowie.

1
Deepak 2 kwiecień 2020, 12:39

3 odpowiedzi

Najlepsza odpowiedź

Najprostszy sposób warunkowego dodawania właściwości do obiektu wygląda następująco:

let data = {
    metadata : {
        name: apple,
        type: fruits
    }
}

if (code_1) {
   data.match_attributes = {
      value : code_1
   }
}

Możesz także usunąć już istniejące rzeczy z obiektów takich jak ten:

let data = {
    metadata : {
        name: apple,
        type: fruits
    },
   match_attributes: {
      value: code_1
   }
}

if (!data.match_attributes.value) {
   delete data.match_attributes
}

1
Georgi B. Nikolov 2 kwiecień 2020, 09:42

Możesz najpierw skonstruować obiekt podstawowy, a następnie dodać obiekt (match_attributes) tylko wtedy, gdy jest dostępny:

let test = {
  match_metadata : {
    name: this.name,
    type: this.type
  }
}

if(this.getValue) {
  test.match_attributes = {
    value : this.getValue
  }
}
0
Omar Alhaddad 2 kwiecień 2020, 09:49
let data = 
{
'filter' : {
    'metadata' : {
        'name': 'apple',
        'type': 'fruits'
    },
    'match_attributes': {
        'value' : ''
    }
}
}
if(!data.filter.match_attributes.value){
delete data.filter.match_attributes
}

console.log(data);

Tak, możesz do tego użyć operatora delete. Mam nadzieję że to pomoże!

0
Sankhavaram Saitulasiram 2 kwiecień 2020, 09:44