javascript - Angular2 korištenje Elvis operatora na ključu objekta s kosom crtom


Imao sam problema s parsiranjem, što se rješava Elvis operatorom, ali ako imam ključ koji sadrži kosa crta, ne mogu koristiti Elvis operator jer taj ključ moram staviti u uglate zagrade.

Radi ako je ključ jednostavan poput ovog ("firstname")

{{ data?.record?.firstname }}

Ne radi ako ključ ima naprijedne zagrade poput ovih ("name/first")

{{ data?.record?['name/first']}}

Čini se da Elvis nije dostupan ako koristim uglate zagrade.

Ima li kakvog zaobilaznog rješenja? Možda način za escape-anje kosa crta u . notaciji ovako:

{{ data?.record?.name\\/first }}

Odgovor #1

Elvis operator je dostupan samo za ., a ne za druge operatore dereferenciranja poput [].

Kao privremeno rješenje koristi

{{ data?.record ? data.record['name/first'] : null}}

Odgovor #2

Zapravo, možete koristiti i ? i [] istovremeno:

Sintaksa

obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)

U vašem slučaju, to bi trebalo biti:

{{ data?.record?.['name/first']}}

I još uvijek radi ako je to niz, ovako:

attributes['bar/foo']?.[0]

Vrlo korisno... :-)

izvor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining

Povezani članci