Ýaýradylan senesi

JavaScript Toplamasy: Doly Programaçylar Üçin Ýol Gösteriji

Awtorlar

Näme Set näme?

Set, islenýň her hiliň görnüşiniň üýtgeşik gymmatlyklaryny saklamak üçin mümkinçilik berýän maglumat gurluşydyr. Ol massiwe meňzeýär, ýöne takrarlanan gymmatlyklaryň bolmagyna rugsat bermeýär. Her hili görnüşde üýtgeşik gymmatlyklary saklamak üçin ajaýyp usuldyr. Käwagt siz massiwde üýtgeşik gymmatlyklary saklamak isleýärsiňiz, ýöne gymmatlygyň öňden bar-ýokdugyny barlamak üçin massiwi döwriňiz gerekmeýär. Şonda Set size ýardam berer.

Öňki makalada biz Javascript Map barada gürrüň etdik. Set, Map-a meňzeýär, ýöne ol diňe açarlary, gymmatlyklary däl, saklaýar. Her hili görnüşde üýtgeşik gymmatlyklary saklamak üçin ajaýyp usuldyr. Map-y köp halatlarda ulanmak kyn bolýar. Şonuň üçin Set barada gürrüň edeli.

Javascript Set näme?

Set obýektleri, gymmatlyklaryň toplumlarydyr. Set-de bir gymmatlyk diňe bir gezek bolup biler; ol Set-iň toplamında üýtgeşikdir. Set-iň elementlerini goşulma tertibine görä döwrip bilersiňiz. Goşulma tertibi, her bölegi Set-e add() usuly bilen üstünlikli goşulanyň tertibine laýyk gelýär (ýagny Set add()-y çagyrandan soň, Set-de eýýäm şol bir ýaly element bolmady).

Spetsifikasiýa Set-leri, "ortaça, toplumdaky elementleriň sanynyň üstünde sublinear erişim wagtlaryny üpjün edýän" usullarda amala aşyrylmagyny talap edýär. Şonuň üçin ony içki tarapdan heş-tablisa (O(1) gözleg bilen), gözleg agajyna (O(log(N)) gözleg bilen) ýa-da başga bir maglumat gurluşyna hödürlemek mümkin, esasysi, toplumyň çylşyrymlylygy O(N)-den gowy bolmalydyr.

Set-i nädip döretmeli?

Set-i döretmegiň iki usuly bar. Birinji usul Set konstruktoruny ulanmakdyr. Ikinji usul Set obýekt literalyn ulanmakdyr.

Set konstruktor

Set konstruktor, täze Set obýektini döredýär. Konstruktor üçin argument hökmünde iterirlenýän obýekti berip bilersiňiz. Iterirlenýän obýektiň elementleri täze Set-e goşular.

const set = new Set([1, 2, 3, 4, 5])

Set obýekt literaly

Set obýekt literaly, täze Set obýektini döredýär. Obýekt literal üçin argument hökmünde iterirlenýän obýekti berip bilersiňiz. Iterirlenýän obýektiň elementleri täze Set-e goşular.

const set = {1, 2, 3, 4, 5};

Set Usullary & Ýagtylyk

UsulAçyklamalar
add()Set obýektiň içine görkezilen gymmatlykly täze elementi goşýar.
clear()Set obýektinden ähli elementleri aýyrýar.
delete()Görkezilen gymmatlyk bilen baglanyşykly elementi aýyrýar we Set.prototype.has(value) öňünden gaýtarjak gymmatlygy gaýtarýar. Set.prototype.has(value) soňra ýalan gaýtarar.
entries()Goşulma tertibine görä Set obýektindäki her bir element üçin [value, value] massiwini öz içine alýan täze Iterator obýektini gaýtarýar.
forEach()Goşulma tertibine görä Set obýektindäki her bir gymmatlyk üçin berilen funksiýany bir gezek ýerine ýetirýär.
has()Set obýektinde görkezilen gymmatlyk bilen baglanyşykly element bar-ýokdugyny tassyklaýan boolean gaýtarýar.
keys()Goşulma tertibine görä Set obýektindäki her bir element üçin gymmatlyklary öz içine alýan täze Iterator obýektini gaýtarýar.
values()Goşulma tertibine görä Set obýektindäki her bir element üçin gymmatlyklary öz içine alýan täze Iterator obýektini gaýtarýar.
ÝagtylykAçyklamalar
sizeSet obýektindäki gymmatlyklaryň sanyny gaýtarýar.

Set Mysallary

Set-e gymmatlyk goşmak

const set = new Set([1, 2, 3, 4, 5])
set.add(6)
console.log(Set) // Set { 1, 2, 3, 4, 5, 6 }

Set-den gymmatlygy aýyrmak

const set = new Set([1, 2, 3, 4, 5])
set.delete(3)
console.log(set) // Set { 1, 2, 4, 5 }

Set-de gymmatlygyň bar-ýokdugyny barlamak

const set = new Set([1, 2, 3, 4, 5])
console.log(set.has(3)) // true

Set-i döwriň

const set = new Set([1, 2, 3, 4, 5])
for (const item of Set) {
  console.log(item)
}
// 1
// 2
// 3
// 4
// 5

Set-i massiwe öwürmek

const set = new Set([1, 2, 3, 4, 5])
const array = Array.from(set)
console.log(array) // [1, 2, 3, 4, 5]

Massiwi Set-e öwürmek

const Array = [1, 2, 3, 4, 5]
const set = new Set(array)
console.log(Set) // Set { 1, 2, 3, 4, 5 }

Set-iň ölçegine seretmek

const set = new Set([1, 2, 3, 4, 5])
console.log(set.size) // 5

Set-i arassalamak

const set = new Set([1, 2, 3, 4, 5])
set.clear()
console.log(set) // Set {}

Set-leri birleşdirmek

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
const set3 = new Set([...set1, ...set2])
console.log(set3) // Set { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

Iki Set-iň kesişmegini almak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => set2.has(x)))
console.log(set3) // Set { 4, 5 }

Iki Set-iň tapawutyny almak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5, 6, 7, 8])
const set3 = new Set([...set1].filter((x) => !set2.has(x)))
console.log(set3) // Set { 1, 2, 3 }

Set-iň başga bir Set-iň alt toplumydygyny barlamak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set2].every((x) => set1.has(x))) // true

Set-iň başga bir Set-iň üst toplumydygyny barlamak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([4, 5])
console.log([...set1].every((x) => set2.has(x))) // false

Iki Set-iň aýry-aýrydygyny barlamak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([6, 7, 8, 9, 10])
console.log([...set1].every((x) => !set2.has(x))) // true

Iki Set-iň deňdigini barlamak

const set1 = new Set([1, 2, 3, 4, 5])
const set2 = new Set([1, 2, 3, 4, 5])
console.log(set1.size === set2.size && [...set1].every((x) => set2.has(x))) // true

Браузерлерde ýaýranlygy

ChromeChromeFirefoxFirefoxEdgeEdgeSafariSafariOperaOpera
49+44+12+10.1+36+

Set vs. Massiw

SetMassiw
Üýtgeşik gymmatlyk, takrarlanan gymmatlyklaryň bolmagyna rugsat bermeýärTakrarlanan gymmatlyklaryň bolmagyna rugsat berýär
Set, gymmatlyklaryň tertibi bilen baglanyşykly däl, ýygyndysydyrMassiw, gymmatlyklaryň tertibi bilen baglanyşyklydyr
Set iterirlenýänMassiw iterirlenýän
Set, heş prosesini ulanýandygy üçin massiwe garanda başlangyçda geç bolýar.Massiw, başlangyçda tiz bolýar.
Element bar-ýokdugyny barlamakda ýokary işjeňlikElementlere erişimde ýokary işjeňlik

Bu makalanyň başdan blog.imam.dev saýtynda çap edildi.

Salgylar

  1. Mozilla Developer Network - Set

  2. W3Schools - Set

  3. ECMAScript® 2015 Language Specification - Set