Junior
Как да премахнете всички дублиращи се елементи от масив?
sobes.tech AI
Отговор от AI
Има няколко разпространени начина:
-
Използване на
Set: Най-модерният и кратък начин.Setсъхранява само уникални стойности.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; // uniqueArr ще бъде [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); // За обекти трябва да ги преобразувате в низове за коректно сравнение с Set // uniqueArr ще бъде [{ id: 1, name: 'A' }, { id: 2, name: 'B' }] -
Използване на
filterиindexOf: Филтриране на масив, като се оставят елементите, чието първо срещане е равно на текущия индекс.const arr = [1, 2, 2, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); // uniqueArr ще бъде [1, 2, 3, 4, 5] -
Използване на
reduce: Създаване на нов масив, като се добавят елементи, ако все още ги няма в акумулатора.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 ще бъде [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], []); // По-кратък вариант // uniqueArr ще бъде [1, 2, 3, 4, 5] -
Използване на обект/Map: Създаване на временен обект или
Mapза проследяване на вече срещани елементи.const arr = [1, 2, 2, 3, 4, 4, 5]; const seen = {}; const uniqueArr = arr.filter(item => seen.hasOwnProperty(item) ? false : (seen[item] = true)); // uniqueArr ще бъде [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 ще бъде [1, 2, 3, 4, 5]
Методът с използване на Set обикновено е най-бързият и четим за примитивни типове. За обекти може да е необходима допълнителна логика.