pretvaranje enum objekta u niz vraća dodatni objekt u JavaScriptu


Volio bih znati kako pretvoriti enum objekt u niz objekata u JavaScriptu

Radi, ali dobivam izlaz s četiri niza objekata umjesto s dva niza objekata

const result = Object.entries(countries).map(([value, key]) =>
   ({ country: value.toLowerCase(), id: key })
);

enum countries {
  SINGAPORE = 123,
  DENMARK = 246
}

Stvarni izlaz:

[
  {country: '123', id: 'singapore'}
  {country: '246', id: 'denmark'}
  {country: 'singapore', id: 123}
  {country: 'denmark', id: 246}
]

Očekivani rezultat:

[
  {country: "singapore", id: 123},
  {country: "denmark", id: 246}
]

Odgovor #1

Važno je razumjeti JavaScript koji TypeScript generira kada koristite enum - vaš će izgledati ovako:

{
    "123":"SINGAPORE",
    "246":"DENMARK",
    "SINGAPORE":123,
     "DENMARK":246
}

Što bi trebalo jasno pokazati zašto dobivate 4 stavke kada ih nabrajate koristeći Object.entries (ili Object.keys itd.).

Možete filtrirati numeričke vrijednosti ako želite

var countries = {
        "123":"SINGAPORE",
        "246":"DENMARK",
        "SINGAPORE":123,
         "DENMARK":246
    }

const result = Object.entries(countries)
                    .filter(([key,_]) => !isNaN(key))
                    .map(([key, value]) => ({ country: value.toLowerCase(), id: key }));
                    
console.log(result);

Povezani članci