Junior
Kā no masīva izdzēst visus dublikātus?
sobes.tech AI
Atbilde no AI
Ir vairākas izplatītas metodes:
-
Izmantojot
Set: Modernākais un kodolīgākais veids.Setglabā tikai unikālas vērtības.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // uniqueArr būs [1, 2, 3, 4, 5]const arr = [{ id: 1, name: 'A' }, { id: 2, name: 'B' }, { id: 1, name: 'A' }]; const uniqueArr = Array.from(new Set(arr.map(JSON.stringify))).map(JSON.parse); // Objektiem nepieciešams tos pārvērst uz virkni, lai pareizi salīdzinātu ar Set // uniqueArr būs [{ id: 1, name: 'A' }, { id: 2, name: 'B' }] -
Izmantojot
filterunindexOf: Masīva filtrēšana, atstājot tikai pirmo parādīšanos:const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); // uniqueArr būs [1, 2, 3, 4, 5] -
Izmantojot
reduce: Izveidojot jaunu masīvu, pievienojot tikai jaunus elementus:const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((accumulator, current) => { if (!accumulator.includes(current)) { accumulator.push(current); } return accumulator; }, []); // uniqueArr būs [1, 2, 3, 4, 5]const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.reduce((accumulator, current) => accumulator.includes(current) ? accumulator : [...accumulator, current], []); // Īsāka versija // uniqueArr būs [1, 2, 3, 4, 5] -
Izmantojot objektu/Map: Izveidojot pagaidu objektu vai
Map, lai sekotu jau redzētajiem elementiem:const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = {}; const uniqueArr = arr.filter(item => seen.hasOwnProperty(item) ? false : (seen[item] = true)); // uniqueArr būs [1, 2, 3, 4, 5]const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = new Map(); const uniqueArr = arr.filter(item => { if (!seen.has(item)) { seen.set(item, true); return true; } return false; }); // uniqueArr būs [1, 2, 3, 4, 5]
Set izmantošana parasti ir visefektīvākā un lasāmākā primitivajiem tipiem. Objektiem var būt nepieciešama papildu loģika.