JavaScript 배열에서 중복 값을 제거하는 것은 일반적인 작업일 수 있으며, 특히 중복 항목이 포함될 수 있는 데이터로 작업할 때 더욱 그렇습니다. 데이터의 특성과 성능 고려 사항에 따라 이를 효과적으로 달성하기 위한 여러 접근 방식이 있습니다.
이 방법은 내장된 Set 생성자와 스프레드를 활용합니다. 원래 배열의 고유한 값만 포함하는 새 배열을 생성하는 구문:
const uniq = [...new Set(array)];
이 접근 방식은 filter() 메서드를 사용하여 배열을 반복하고 각 요소의 첫 번째 발생이 배열 내 현재 위치와 일치하는지 확인합니다. 위치가 일치하지 않는 요소는 중복으로 간주됩니다.
const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
해시테이블은 키-값 쌍을 사용하여 중복 요소를 감지하는 효율적인 방법을 제공합니다. 이 접근 방식에서는 각 요소가 해시 테이블에 추가되고 요소의 존재 여부가 즉시 확인됩니다.
function uniq(a) { const seen = {}; return a.filter((item) => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); }
이전 두 요소의 이점을 결합합니다. 접근 방식에서 이 솔루션은 기본 값에 해시테이블을 활용하고 객체에 대해 선형 검색을 활용합니다.
function uniq(a) { const prims = { boolean: {}, number: {}, string: {} }, objs = []; return a.filter((item) => { const type = typeof item; if (type in prims) return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); else return objs.indexOf(item) >= 0 ? false : objs.push(item); }); }
중복 항목을 제거하기 전에 배열을 정렬하면 프로세스가 단순화될 수 있습니다.
function uniq(a) { return a.sort().filter((item, pos, ary) => !pos || item != ary[pos - 1]); }
특정 기준에 따라 중복 항목을 제거해야 하는 경우, 객체의 속성과 같은 경우 uniqBy() 메서드에 콜백 함수를 제공할 수 있습니다. 방법:
function uniqBy(a, key) { const seen = {}; return a.filter((item) => { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }); }
중복 개체의 첫 번째 또는 마지막 항목만 유지하려면 Set 또는 Map 데이터 구조를 사용할 수 있습니다.
function uniqByKeepFirst(a, key) { const seen = new Set(); return a.filter((item) => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); } function uniqByKeepLast(a, key) { return [...new Map(a.map((x) => [key(x), x])).values()]; }
위 내용은 JavaScript 배열에서 중복 값을 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!