문제는 그래서 우리의 일상 개발에 초점을 자바 스크립트 배열은 매우 일반적인 문제로 설명 될 수 있는가? 같은 모든 어떤 방법을 많이 사용에 문제의 배열을 해결하기 위해?
1 중량 방법에 따라
I는 JS 내용 시작할 때 하나의 방법에 따라서는 같은 객체하여 사용하는 판단의 동일한 요소의 존재를 가능하게하는 경우 객체 덮어 쓸 특성 때문에이 방법은 초보자 제, 용액 생각있다 사용될.
const unique = (arr) => {
let map = {};
let res = [];
for (let i = 0; i < arr.length; i++) {
if (!map[arr[i]]) {
map[arr[i]] = 1;
res.push(arr[i]);
}
}
return res;
}
2, 무거운 같이 IndexOf를 사용하는
방법의 원리 같이 IndexOf 또한 무거운 매우 간단하지만 액세스 그래서이 요소의 존재는 이미 반복 요소 것을 나타내면 배열 인덱스, 메모리 배열에 따라 결정된다.
const unique = (arr) => {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (res.indexOf(arr[i]) < 0) {
res.push(arr[i]);
}
}
return res;
}
(3) 상기 지표 값을 이용하여 판정 같이 IndexOf
인덱스 값과 지수 값이 같지 않으면 같이 IndexOf이 같이 IndexOf 인덱스의 현재 값과의 판단 지수에 따라 판단하는 데 사용되며, 반복 요소의 존재를 나타내는, 제거 될 수있다.
const unique = (arr) => {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (arr.indexOf(arr[i]) == i) {
res.push(arr[i]);
}
}
return res;
}
(4) 상기 지표 값을 이용하여 판정 lastIndexOf에서도
그리고 비슷한 원리, 대신 사용
const unique = (arr) => {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (arr.lastIndexOf(arr[i]) == i) {
res.push(arr[i]);
}
}
return res;
}
5 라운드 로빈 스물 두의 수
반복 제거한 경우 반복 횟수 (미리 배열을 정렬하는) 두 개의 인접한 있는지 여부를 확인하여 한주기
const unique = (arr) => {
let res = [];
// 需要先排序
arr.sort((a, b) => a - b);
res[0] = arr[0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
res.push(arr[i]);
}
}
return res;
}
도 6에있어서 (ES6하기위한 새로운 방법) 배열의 사용을 포함
추가 할 필요가없는 경우에는 임시 배열이 저장되어 있는지를 판정하는 방법을 포함한다
const unique = (arr) => {
let res = [];
for (let i = 0; i < arr.length; i++) {
if (!res.includes(arr[i])) {
res.push(arr[i]);
}
}
return res;
}
필터 함수의 어레이를 사용하여도 7에 도시 된 바와 같이, + 같이 IndexOf 결정
필터 어레이를 사용하는 방법은 이송되고 또한 인덱스 값을 판단 같이 IndexOf
const unique = (arr) => {
return arr.filter((item, index, _arr) => {
return _arr.indexOf(item) === index;
})
}
8, 스플 라이스 중복 제거
직접 원래의 배열 방법의 스플 라이스 배열에 의해 원래의 배열을 변경하지 않으면, 당신은 복사 할 필요가 있음을 참고로 수정해야하고 방법이 될 수 있습니다
const unique = (arr) => {
arr.sort((a, b) => a - b);
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i + 1] === arr[i]) {
arr.splice(i, 1);
i--;
}
}
return arr;
}
도 9는, 상기 데이터 구조 맵을 재사용
중복 제거는 비 반복성지도의 동작에 따라 수행 될 수 있지만, 그 특정 메모리 손실을 필요로한다.
const unique = (arr) => {
let res = [];
let map = new Map();
for (let i = 0; i < arr.length; i++) {
if (!map.has(arr[i])) {
res.push(arr[i]);
map.set(arr[i], true);
}
}
return res;
}
10, 무거운의 사용을 줄이기 위해 (ES6위한 새로운 방법)
당신이 방법에 익숙하지 않은 작은 파트너가이 방법을보고 배울 수 있습니다 줄이면 코드는 간단하다,이 방법은 좋은 경우 참으로 위대한 사용합니다.
const unique = (arr) => {
return arr.reduce((prev, cur) => prev.includes(cur) ? prev : [...prev, cur], []);
}
11의 데이터 구조 세트를 재사용
이것은 쉽게 사용하려면 ES6, 간단하고 편리한 후에 방법을 다시 배워야 적은 양의 코드를 사용할 수있다
const unique = (arr) => {
return [...new Set(arr)];
}
이러한 단어의 배열로 다시 복잡한 구조에 대한 필요성이 재 구조 설정하는 데 사용될 수 있다면
let arr = [1, {a: 1, b: 2}, [1, 2, 3], {a: 1, b: 2}, [1, 2, 3]
const unique = (arr) => {
return [...new Set(arr.map(item => JSON.stringify(item)))].map(item => JSON.parse(item));
}
위의 코드는 간단한 배열 작업 중복 제거에만 적용됩니다
최근에 작성된
이상의 방법 때문에, 그래서 우리는 다른 시나리오, 시간 복잡도 및 자주 고려 될 필요가 공간의 복잡성에 따라 다른 방법을 사용할 수 있습니다. 시간 공간 시간 또는 공간에 대한 다양한 요구에 따라 선택 될 수있다.