# hogyan lehet eltávolítani a Tömbmásolatokat az ES6 – ban

íme 3 módszer a tömbök másolatainak kiszűrésére és csak az egyedi értékek visszaadására. Kedvencem a Set használata, mert ez a legrövidebb és legegyszerűbb 😁

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. A set

használata először hadd kezdjem azzal, hogy elmagyarázom, mi a halmaz:

Set az ES6-ban bevezetett új adatobjektum. Mivel a Set csak egyedi értékek tárolását teszi lehetővé. Ha átmegy egy tömbben, eltávolítja az ismétlődő értékeket.

Oké, menjünk vissza a kódunkhoz, és bontsuk le, mi történik. Vannak 2 dolgok folynak:

  1. először egy új Set – et hozunk létre egy tömb átadásával. Mivel a Set csak egyedi értékeket engedélyez, az összes másolat eltávolításra kerül.
  2. most a másolatok eltűntek, a spread operátor használatával vissza fogjuk konvertálni tömbbé...
const array = ;// Step 1const uniqueSet = new Set(array);// Set { '🐑', 1, 2, 3 }// Step 2const backToArray = ;// 

# Convert készlet egy tömb segítségével tömb.tól től

Alternatív megoldásként a Array.from használatával Set tömböt is konvertálhat:

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

# 2: Szűrő használata

annak érdekében, hogy megértsük ezt a lehetőséget, nézzük át, mit csinál ez a két módszer: indexOf és filter

# indexOf

a indexOf metódus visszaadja a megadott elem első indexét a tömbünkből.

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

# szűrő

a filter() módszer új elemtömböt hoz létre, amelyek átmennek az általunk megadott feltételen. Más szóval, ha az elem átmegy, és visszaadja a true értéket, akkor a szűrt tömbbe kerül. És minden olyan elem, amely sikertelen vagy visszatér false, akkor nem lesz a szűrt tömbben.

lépjünk közbe, és járjuk végig, mi történik a tömbben.

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;});

az alábbiakban a konzol kimenete látható.a napló fent látható. A másolatok, ahol az index nem egyezik az indexOf. Tehát ezekben az esetekben a feltétel hamis lesz, és nem szerepel a szűrt tömbben.

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

# A duplikált értékek lekérése

a szűrési módszert is használhatjuk a duplikált értékek lekérésére a tömbből. Ezt úgy tehetjük meg, hogy egyszerűen beállítjuk az állapotunkat:

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

ismét lépjünk át ezen, és nézzük meg a kimenetet:

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: A reduce

használata a reduce módszer a tömb elemeinek csökkentésére szolgál,és azokat egy végső tömbbé kombinálja valamilyen szűkítő funkció alapján.

ebben az esetben a szűkítő funkciónk ellenőrzi, hogy a végső tömb tartalmazza-e az elemet. Ha nem, tolja be azt az elemet a végső tömbünkbe. Ellenkező esetben hagyja ki ezt az elemet, és csak a végső tömbünket adja vissza (lényegében átugorva ezt az elemet).

a csökkentés mindig egy kicsit bonyolultabb megérteni, ezért lépjünk be minden esetben, és nézzük meg a kimenetet:

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:// ;

és itt a kimenet a konzolról.napló:

elem akkumulátor (szűkítő funkció előtt) nyomja meg az akkumulátort? akkumulátor (szűkítő funkció után)
🐑 Igen
1 Igen
2 Igen
🐑 nem
🐑 nem
3 Igen

# Közösségi input

  • @smokkku: array.includes(item) több idiomatikus módon teszteli, hogy tömb tartalmazza az elemet

  • @riquelkovsky: csak ma tettem ezt a következőket.Object.keys(array.reduce((map, next) => ({...map, : true}), {}))

-@luisiacc2: persze, a Set() megteszi a trükköt a primitve értékeknél, az objektumoknál egy nem O(n^2) megoldás először sort() – et hajt végre a tömbben(amely O(nlogn) – ben működik), majd keresse meg a szomszédos egyenlő elemeket(ami O(n)), így O(n + nlogn) – et kap.

  • @iamdipankarj: szintén Array.from(new Set()), de ez csak primitíveken működik. Szűrésére ismétlődések tömb egyéni objektumok tömb.filter() az út.

  • @benawad: filter futási idő O(n^2)

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.