✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas luua JavaScriptis kahesuunalist kaarti

6

Kahesuunaline kaart on arvutiteaduse mudel, kus võtme ja väärtuse paaridel on võtmete ja väärtuste vahel bijektiivne 1-1 suhe. See võimaldab meil mitte ainult teha päringuid võtme järgi ja saada väärtust, vaid ka teha päringuid väärtuse järgi ja saada võti. Vaatame, kuidas rakendada JavaScriptis kahesuunalist kaarti ja muudame selle hiljem TypeScriptis turvaliseks

Arvutiteadus ja matemaatika taga

Haarame kahesuunalise kaardi põhidefinitsiooni:

Arvutiteaduses on kahesuunaline kaart assotsiatiivne andmestruktuur, milles võtme-väärtuste paarid moodustavad üks-ühele vastavuse. Seega on binaarsuhe funktsionaalne igas suunas: iga väärtuse saab vastendada ka kordumatu võtmega.

Kuidas luua JavaScriptis kahesuunalist kaarti

Krediit: kahesuunaline kaart

Arvutiteaduse kahesuunalise kaardi juured on matemaatilises funktsioonis, mida nimetatakse bijektsiooniks. Seos paari komponentide ja selle iga komponendi vahel erinevates komplektides on bijektiivne funktsioon, mida nimetatakse ka inverteeritavaks funktsiooniks, mis on funktsioon, mis töötab mõlemal viisil, sidudes täpselt ühe elemendi ühest hulgast täpselt ühe elemendiga. teine ​​komplekt:

Kuidas luua JavaScriptis kahesuunalist kaarti

Krediit: Bijection

Seda silmas pidades saame teada, et ülaltoodud komplektide bijektiivne funktsioon annab midagi sellist:

f (1) = D
f (C) = 3

Teine asi, mis tuleneb bijektiivsest funktsioonist, on see, et komplektid on täpselt sama pikkusega, vastasel juhul bijekteerimine ebaõnnestub.

Kahesuunalise kaardi lähtestamine

Modelleerime selle JavaScripti klassiga, mis lähtestatakse võtme-väärtuste paaride objektiga:

const bimap = new BidirectionalMap({ a: 'A', b: 'B', c: 'C', })

Sisemiselt loome kaks loendit. Üks loend salvestab paaride loendi, mida me nimetame edasisuunavaks kaardiks, kus võtmekaardid väärtusele ja on koopia objektist, mida kasutasime kahesuunalise kaardi lähtestamiseks. Teist loendit nimetatakse pöördkaardiks ja see salvestab kahesuunalise kaardi lähtestamiseks kasutatud objekti versiooni, kus võtme ja väärtuse paarid on ümber pööratud ja "väärtus" vastendatakse nüüd "võtmega":

Pange tähele, et kahesuunalise kaardi lähtestava objekti olemuse tõttu ei saa te võtme jaoks numbrit kasutada, kuid saate seda siiski kasutada väärtusena ja saate hiljem selle järgi päringuid teha:

const bimap = new BidirectionalMap({ a: 42, b: 'B', c: 'C', })

Jõulisema, kuid ka keerukama versiooni saab kirjutada JavaScripti kaardi andmetüübiga ja lubada võtmeid, mis on numbrid, funktsioonid või isegi NaN.

Hankige element kahesuunaliselt kaardilt

Seni on meil andmestruktuur, mis majutab kahte objekti, millest üks on võtmeväärtuste poolest teise peegel. Nüüd vajame meetodit, et sellest midagi välja saada. Rakendame get()funktsiooni:

get( key) { return this.fwdMap[key] || this.revMap[key] }

See on väga lihtne: kui see on pärikaardil olemas, tagastame selle, vastasel juhul tagastame tagurpidi kaardil. Kui seda pole, undefinedtagastatakse.

Nüüd saame mõned elemendid, näiteks:

console.log( bimap.get('a')) console.log( bimap.get('A'))

Lisage kahesuunalisele kaardile element

Meie kaardil ei ole praegu võimalust rohkem elemente lisada, seega lisame funktsiooni uute elementide lisamiseks kaardile:

add( pair) { this.fwdMap[pair[0]] = pair[1] this.revMap[pair[1]] = pair[0] }

See võtab vastu kahest elemendist koosneva massiivi, mille tippime hiljem TypeScriptiga korteežina ja määrab need võtmetena – mõlemas suunas vastavatele objektidele väärtused.

Ja nüüd saame paari lisada ja selle uue paari kohta päringuid teha

bimap.add(['d', 'D']) console.log( bimap.get('D'))

Tüübikindel kahesuunaline kaart TypeScriptis

Asjade paremaks muutmiseks ja tippimise turvaliseks muutmiseks saame selle TypeScriptis ümber kirjutada ja lisada tippimismõisteid, nagu kaardi lähtestamisel üldine objekt ja uue elemendi lisamisel korteež .

See tippimine muudab meie kaardi nüüd täiesti turvaliseks ja tagab, et sel juhul kasutame alati nii võtmete kui ka väärtuste jaoks stringe.

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem