# kuinka poistaa Matriisikopiot ES6

tässä on 3 tapaa suodattaa kaksoiskappaleet ryhmästä ja palauttaa vain yksilölliset arvot. Suosikkini käyttää Setiä, koska se on lyhin ja yksinkertaisin.😁

const array = ;// 1: "Set";// 2: "Filter"array.filter((item, index) => array.indexOf(item) === index);// 3: "Reduce"array.reduce( (unique, item) => (unique.includes(item) ? unique : ), ,);// RESULT:// ;

# 1. Käyttäen joukkoa

aloitan ensin selittämällä, mikä joukko on:

Set on ES6: ssa esitelty uusi dataobjekti. Koska Set voit tallentaa vain ainutlaatuisia arvoja. Kun syötät array, se poistaa mahdolliset päällekkäiset arvot.

Okei, palataan koodiimme ja puretaan, mitä tapahtuu. On kaksi asiaa meneillään:

  1. ensin luodaan uusi Set läpäisemällä array. Koska Set sallii vain yksilölliset arvot, kaikki kaksoiskappaleet poistetaan.
  2. nyt kaksoiskappaleet ovat poissa, aiomme muuntaa sen takaisin array käyttämällä spread operator ...
const array = ;// Step 1const uniqueSet = new Set(array);// Set { '🐑', 1, 2, 3 }// Step 2const backToArray = ;// 

# Muunna joukko Array käyttäen Array.

Vaihtoehtoisesti voit myös käyttää Array.from: ää muuttaaksesi Set: n arraksi:

const array = ;Array.from(new Set(array));// 

# 2: Käyttämällä suodatinta

tämän vaihtoehdon ymmärtämiseksi käydään läpi, mitä nämä kaksi menetelmää tekevät: indexOf ja filter

# indeksi

indexOf menetelmä palauttaa ensimmäisen löytämänsä indeksin annetusta alkuaineesta.

const array = ;array.indexOf('🐑'); // 0array.indexOf(1); // 1array.indexOf(2); // 2array.indexOf(3); // 5

# suodatin

filter() menetelmä luo uuden joukon elementtejä, jotka läpäisevät antamamme ehdollisen. Toisin sanoen, jos Elementti läpäisee ja palauttaa true, se sisällytetään suodatettuun joukkoon. Ja mikä tahansa elementti, joka epäonnistuu tai palaa false, se ei ole suodatetussa jonossa.

astutaan sisään ja kävellään läpi, mitä tapahtuu, kun kierrämme joukon läpi.

const array = ;array.filter((item, index) => { console.log( // a. Item item, // b. Index index, // c. indexOf array.indexOf(item), // d. Condition array.indexOf(item) === index, ); return array.indexOf(item) === index;});

alla on lähtö konsolista.loki näkyy yllä. Kaksoiskappaleet ovat siellä, missä indeksi ei vastaa indeksiä. Joten näissä tapauksissa, ehto on väärä ja ei sisälly meidän suodatettu array.

Item Index indexOf Condition
🐑 0 0 true
1 1 1 true
2 2 2 true
🐑 3 0 false
🐑 4 0 false
3 5 5 true

# Nouda päällekkäiset arvot

voimme myös käyttää suodatusmenetelmää hakeaksemme päällekkäiset arvot matriisista. Voimme tehdä tämän yksinkertaisesti muuttamalla tilaamme näin:

const array = ;array.filter((item, index) => array.indexOf(item) !== index);// 

jälleen anna askel tämän läpi ja katso tuotos:

Item Index indexOf Condition
🐑 0 0 false
1 1 1 false
2 2 2 false
🐑 3 0 true
🐑 4 0 true
3 5 5 false

# 3: Pelkistämällä

reduce menetelmää käytetään pelkistämään joukon alkuaineita ja yhdistämään ne lopulliseksi ryhmäksi, joka perustuu johonkin ohitettavaan reduktiofunktioon.

tässä tapauksessa reduktiofunktiomme tarkistaa, sisältääkö lopullinen ryhmämme kohteen. Jos se ei toimi, työnnä tuo esine lopulliseen järjestelmäämme. Muuten, ohita että elementti ja palata vain meidän lopullinen array kuten on (lähinnä ohittaa, että elementti).

pelkistys on aina hieman hankalampi ymmärtää, joten astutaan myös jokaiseen juttuun ja katsotaan tuloste:

const array = ;array.reduce((unique, item) => { console.log( // a. Item item, // b. Final Array (Accumulator) unique, // c. Condition (Remember it only get pushed if this returns `false`) unique.includes(item), // d. Reducer Function Result unique.includes(item) ? unique : , ); return unique.includes(item) ? unique : ;}, ); // 👈 The initial value of our Accumulator is an empty array// RESULT:// ;

tässä on lähtö konsolista.loki:

kohta akku (ennen Vähennystoimintoa) työnnä akkuun? akku (Reduktiofunktion jälkeen)
🐑 Kyllä
1 Kyllä
2 Kyllä
🐑 Ei
🐑 Ei
3 Kyllä

# Yhteisön panos

  • @smokku: array.includes(item) on idiomaattisempi tapa testata, sisältääkö array kappaleen

  • @riquelkovsky: juuri tänään tein tämän tekemällä seuraavaa.Object.keys(array.reduce((map, next) => ({...map, : true}), {}))

-@luisiacc2: Toki, Set() tekee tempun primitve-arvoille, olioilla ei O(n^2) ratkaisu olisi suorittaa ensin sort() array(joka toimii O(nlogn)), ja sitten etsiä adjasentit yhtä suuret kohteet (joka on O(n)) , joten sait O(n + nlogn).

  • @iamdipankarj : myös, Array.from(new Set()), mutta tämä toimii vain alkukantaisilla. Suodatukseen kaksoiskappaleet joukko mukautettuja esineitä Array.filter() on tie.

  • @benawad: filter juoksuaika on O(n^2)

Vastaa

Sähköpostiosoitettasi ei julkaista.