Nazwa mapy jako zmienna.

0

Na wstępie chce zaznaczyć że jeśli pomyliłem metodę z funkcją to przepraszam.

Witam serdecznie. Borykam się z pewnym problemem. Chciałbym żeby nazwa obiektu była zmienną, którą wysyłam do metody, w której obiekt jest tworzony. Nie wiem czy to możliwe ale liczę że ktoś może coś wiedzieć na ten temat. Jak to mniej więcej wygląda zamieszczam w kodzie.

HTML

<mat-form-field>
                  <mat-label>Bitka</mat-label>
                  <mat-select name="xxx" #xxx="ngModel" [(ngModel)]="service.formData.abb.xxx">
                    <mat-option value="W">W</mat-option>
                    <mat-option value="W10">10</mat-option>
                    <mat-option value="W20">20</mat-option>
                  </mat-select>
                </mat-form-field>
saveAbb() {
    let value = this.service.formData.abb; //to przybiera wartość pobraną z inputa

    this.boolControl(value.xxx.toString(), 'nazwaObiektu') 
  }

A tutaj metody, w której ma się dokonywać tworzenie obiektu.

boolControl(value:string, valueAbb: any){

    if(value === 'W'){
      this.testArray.push({
        valueAbb: {w:true,w10:false,w20:false},
      })}
    if(value === 'W10'){
      this.testArray.push({
        valueAbb: {w:false,w10:true,w20:false},
      })}
    if(value === 'W20'){
      this.testArray.push({
        valueAbb: {w:false,w10:false,w20:true},
      })}
  }

W chwili obecnej po wysłaniu posta do firebase otrzymuję mape o nazwie valueAbb o poprawnych wartościach(false/true). Czy ktoś zna jakiś sposób na to by valueAbb zamienić na wartość wysłaną do metody?

3

Chcesz stworzyć obiekt z dynamicznym kluczem?

const nazwaKlucza = 'siema';

const obiekt = {
  [nazwaKlucza]: 14
};
{siema: 14}
0

Chodzi mi o to żeby efektem końcowym było coś takiego. http://ibb.co/Fs2zCKm

Gdzie to np agility czy attacks było by efektem wywołania metody, w której mógł bym podać jako parametr takową nazwę.

U mnie to wygląda mniej więcej tak.
http://prntscr.com/nx5n2l
Jak widać ten drugi parametr czyli "nazwa1" w "boolControl" zapisany jako valueAbb nie jest wykorzystywany(mimo użycia tej samej nazwy w instrukcjach warunkowych) Stąd moje pytanie czy ja to źle zapisuję czy jest to po prostu niemożliwe do zrobienia?

Aktualnie po wysłaniu tego baza wygląda tak:

http://prntscr.com/nx5q14

0

Może pokrótce wytłumaczę jak to działa tak dla jasności.

1.Z html napływa jedna z 3 wartości(W, W10 lub W20).
2.W SaveAbb() do zmiennej value przypisana jest skrócona wersja wywołania tego, a następnie odpalana jest metoda boolControl w której podaje dwa parametry. Value czyli W, W10 lub W20 i nazwę jaką chce przypisać nazwie tej (mapy, obiektu czy jak to tam można nazwać).
3.W boolControl są trzy instrukcje warunkowe, które sprawdzają, która z wartości była umieszczona w value. Gdy to sprawdzi do tablicy abilities ma zostać włożona (mapa czy też obiekt, serio nie wiem jak to się nazywa) o wysłanej prze zemnie nazwie (czyli drugi parametr nadany przy wywołaniu boolControl()).

I to tyle. Problem w tym że wysłana nazwa nie działa, nie jest czytana w instrukcji if. Zamiast tego dostaje obiekt/mape o nazwie tej zmiennej -_-

1

@TomRiddle podał Ci poprawne rozwiązanie, musisz umieścić zmienną valueAbb w kwadratowych nawiasach.

Możesz też skrócić swoje ify do czegoś takiego: { w: value === 'W', w10: value === 'W10' ... itd ... },

0

Racja, mój błąd. Naprawdę dziękuje za pomoc, męczyłem się z tym 2 dni :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1