중량 여러 솔루션 스크립트 어레이 (11까지)

문제는 그래서 우리의 일상 개발에 초점을 자바 스크립트 배열은 매우 일반적인 문제로 설명 될 수 있는가? 같은 모든 어떤 방법을 많이 사용에 문제의 배열을 해결하기 위해?

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));
    }

위의 코드는 간단한 배열 작업 중복 제거에만 적용됩니다

최근에 작성된

이상의 방법 때문에, 그래서 우리는 다른 시나리오, 시간 복잡도 및 자주 고려 될 필요가 공간의 복잡성에 따라 다른 방법을 사용할 수 있습니다. 시간 공간 시간 또는 공간에 대한 다양한 요구에 따라 선택 될 수있다.

나는 아 여전히 지식의 점을 이해하지 않는다! 당신이 뭔가를 배울 희망을 신속하게 배울!

게시 19 개 원래 기사 · 원 찬양 58 ·은 50000 +를 볼

추천

출처blog.csdn.net/cyg_l02/article/details/103801472