Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Ako vyriešiť tento problém s funkciou v JS [hra]

Ten veľký if pre každý typ "smeru otočenia" by sa pri rozumnejšom návrhu dal zjednodušiť a zefektívniť. Ale keď to funguje, tak to už nechám tak.

Filtrovať pole sa dá napríklad takto:

nblocks[0].filter(function(x) { return x.active === 1})

V prípade, že stačí, aby to fungovalo v moderných prehliadačoch (alebo použijete TypeScript), tak sa dá použiť zápis so šípkou:

nblocks[0].filter(x => x.active === 1)

V prípade, že sa rozhodnete ukladať true/false (alebo hodnota active nemusí byť len 1, ale stačí že je "truthy", t.j. po pretypovaní na boolean to bude true), stačí:

nblocks[0].filter(x => x.active)

Tá funkcia môže byť samozrejme definovaná aj mimo, takže sa to dá zapísať pekne aj pre staršie prehliadače:

nblocks[0].filter(isActive)

Ak stači, aby to fungovalo v moderných prehliadačoch (alebo použijete TypeScript), môžete iterovať cez for..of:

for (const code of nblocks[0].filter(x => x.active)) { ... }

Prípadne môžete iterovať funkciou forEach:

nblocks[0].filter(x => x.active).forEach(...)

Efektívnosť si treba zmerať, ale tak odhadom bude ten základný cyklus for+if najrýchlejší. Ostatné budú asi pomalšie, aj keď možno prehľadnejšie.

Inak ak máte v nblocks rôzne typy blokov, tak by možno stálo za úvahu ich pomenovať, aby to bolo prehľadnejšie. Buď namiesto nblocks[0] použiť nblocks.electricity (resp. nblock.levers), alebo použiť konštantu namiesto indexu nblocks[BlocksType.ELECTRICITY] (resp. nblocks[BlocksType.LEVERS]).

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny