JavaScript – Ako odstrániť prvok a prvky z poľa podľa názvu, indexu a pozície (časť 2)

JavaScript

V tomto článku nadväzujem na prvú časť, kde som sa opäť vyhral s JavaScriptom a pripravil ďalšie šikovné riešenia, ktoré uľahčia programátorom prácu s poľami (arrays).

Tentoraz využívať vlastnosť poľa ako odkaz, a tak v nasledujúcich príkladoch nepracujem s návratovou hodnotou a nevytváram nové pole, ale priamo editujem existujúce pole.

Ako prvý príklad uvediem spôsob, ako odstrániť prvok podľa indexu.

function removeItemByIndex(data, index) {
  data.splice(index, 1);
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemByIndex(data, 3); // d
console.log(data);

// [ 'a', 'b', 'c', 'e', 'f', 'g' ]

removeItemByIndex(data, 2); // c
console.log(data);

// ['a', 'b', 'e', 'f', 'g']

V ďalšom príklade uvádzam spôsob ako odstrániť viacero prvkov podľa indexu. Tu som sa už musel trošku vyhrať podobne ako v nasledujúcich príkladoch. Prvky musím mazať od konca lebo po každom zmazaní sa mení poradie existujúcich prvkov. Toto ale nemá dopad na prvky, ktoré sú pred naposledy zmazaným prvkom.

function removeItemsByIndex(data, indices) {
  indices
    .sort()
    .reverse()
    .map((index) => data.splice(index, 1));
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemsByIndex(data, [3, 4, 5]); // d, e, f
console.log(data);

// [ 'a', 'b', 'c', 'g' ]

Druhý spôsob mazania prvkov z poľa je podľa pozície v poli. Prvý príklad maže jeden prvok z poľa.

function removeItemByPosition(data, position) {
  data.splice(position - 1, 1);
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemByPosition(data, 4); // d
console.log(data);

// [ 'a', 'b', 'c', 'e', 'f', 'g' ]

removeItemByPosition(data, 3); // c
console.log(data);

// ['a', 'b', 'e', 'f', 'g']

Nasledujúci príklad maže viacero prvkov podľa pozície z poľa.

function removeItemsByPosition(data, positions) {
  positions
    .sort()
    .reverse()
    .map((position) => data.splice(position - 1, 1));
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemsByPosition(data, [4, 5, 6]); // d, e, f
console.log(data);

// [ 'a', 'b', 'c', 'g' ]

Posledný spôsob mazania prvkov z poľa je cez ich názov. Opäť začnem zmazaním jedného prvku z poľa.

function removeItemByName(data, item) {
  data.splice(
    data.findIndex((element) => element === item),
    1
  );
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemByName(data, "d");
console.log(data);

// [ 'a', 'b', 'c', 'e', 'f', 'g' ]

removeItemByName(data, "c");
console.log(data);

// ['a', 'b', 'e', 'f', 'g']

V poslednom príklade mažem viacero prvkov podľa názvov z poľa. Tu si robím zoznam indexov, potom si ich zoradím, obrátim poradie a mažem od posledného až k prvému. Ak viete tento prístup ešte viac zjednodušiť, budem rád, ak ho uvediete do komentára.

function removeItemsByName(data, items) {
  let indices = [];
  data.filter((item, index) =>
    items.includes(item) ? indices.push(index) : false
  );
  indices
    .sort()
    .reverse()
    .map((index) => data.splice(index, 1));
}

let data = ["a", "b", "c", "d", "e", "f", "g"];
console.log(data);

// ["a", "b", "c", "d", "e", "f", "g"]

removeItemsByName(data, ["d", "e", "f"]);
console.log(data);

// [ 'a', 'b', 'c', 'g' ]

Záver

Týmto druhým dielom ukončujem nateraz problematiku mazania prvkov z poľa. Ak máte aj vy dáke zaujímavé riešenia na tému ako zmazať prvok z poľa, môžete ich uviesť do komentára

https://www.mldgroup.com

Vyštudovaný top manažér pôsobiaci najmä ako manažér, marketér, softvérový inžinier, konzultant, bloger, YouTuber a zatiaľ neúspešný hudobník a producent. V rámci praxe pôsobil v rôznych odvetviach na rôznych pozíciách v malých aj veľkých firmách, vrátane spoluprác a partnerstiev s významnými firmami či poradenskými spoločnosťami.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.