자바 스 크 립 트 는 항상 배열 로 실전 소스 코드 를 다시 만 듭 니 다.

배열 이 무 거 워 지면 보통 면접 을 볼 때 만 만 나 는데 보통 손 으로 배열 에 무 거 운 방법 을 요구 하 는 코드 입 니 다.질문 을 받 았 다 면,배열 을 무 겁 게 하 는 방법 은 어떤 것 이 있 습 니까?그 중 10 가 지 를 맞 힐 수 있다 면 면접 관 이 다시 볼 가능성 이 높다.
실제 프로젝트 에서 만난 배열 은 무 거 워 지고 보통 배경 에서 처리 하 며 전단 처리 배열 을 무 겁 게 하지 않 습 니 다.일상적인 프로젝트 에 사 용 될 확률 은 낮 지만 면접 에서 물 어 볼 수 있 도록 알 아 봐 야 한다.
1.대상 의 속성 활용
대상 속성 이름 을 바 꾸 지 않 는 특성 을 사용 합 니 다.

var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
console.time("nonredundant1");
var nonredundant1 = Object.getOwnPropertyNames(arr.reduce(function(seed, item, index) {
    seed[item] = index;
    return seed;
},{}));
console.timeEnd("nonredundant1");
console.log(nonredundant1);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
2.Set 데이터 구조 사용
set 는 배열 과 유사 한 구조 이지 만 set 구성원 중 중복 되 는 값 이 없습니다.set()함 수 는 하나의 배열 이나 클래스 배열 의 인 자 를 받 아들 여 set 대상 을 생 성 할 수 있 습 니 다.한편,Array.from 방법 은 두 가지 대상 을 진정한 배열 로 바 꾸 는 데 사 용 됩 니 다.배열 과 유사 한 대상(array-like object 와 iterable 을 옮 겨 다 닐 수 있 는 대상 은 ES6 에 추 가 된 데이터 구조 Set 과 Map)을 포함 합 니 다.

var arr = ['qiang','ming','tao','li','liang','you','qiang','tao'];
function unique (arr) {
    return Array.from(new Set(arr))
}
console.time("nonredundant2");
var nonredundant2 = unique(arr);
console.timeEnd("nonredundant2");
console.log(nonredundant2);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
3.for 순환 과 splice 사용

function unique(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = i + 1; j < arr.length; j++) {
            if (arr[i] == arr[j]) {         //         ,splice       
                arr.splice(j, 1);
                j--;
            }
        }
    }
    return arr;
}
console.time("nonredundant3");
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
var nonredundant3 = unique(arr);
console.timeEnd("nonredundant3");
console.log(nonredundant3);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
4.indexOf 로 무 게 를 판단

function unique(arr) {
    var array = [];
    for (var i = 0; i < arr.length; i++) {
        if (array .indexOf(arr[i]) === -1) {
            array .push(arr[i])
        }
    }
    return array;
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant4");
var nonredundant4 = unique(arr);
console.timeEnd("nonredundant4");
console.log(nonredundant4);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
5.sort 정렬 을 사용 하여 다시 정렬 하기

function unique(arr) {
    arr = arr.sort()
    var arrry = [arr[0]];
    for (var i = 1; i < arr.length; i++) {
        if (arr[i] !== arr[i - 1]) {
            arrry.push(arr[i]);
        }
    }
    return arrry;
}
 
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant5");
var nonredundant5 = unique(arr);
console.timeEnd("nonredundant5");
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
6.filter 사용

function unique(arr) {
    var obj = {};
    return arr.filter(function(item, index, arr){
        return obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true)
    })
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant6");
var nonredundant6 = unique(arr);
console.timeEnd("nonredundant6");
console.log(nonredundant6);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
7.맵 데이터 구조 로 무 게 를 제거

function unique(arr) {
    let map = new Map();
    let array = new Array();  //         
    for (let i = 0; i < arr.length; i++) {
        if (map.has(arr[i])) {  //     key 
            map.set(arr[i], true);
        } else {
            map.set(arr[i], false);   //      key 
            array.push(arr[i]);
        }
    }
    return array;
}
 
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant7");
var nonredundant7 = unique(arr);
console.timeEnd("nonredundant7");
console.log(nonredundant7);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
8.reduce 와 include 를 사용 하여 무 게 를 제거 합 니 다.

function unique(arr){
    return arr.reduce((prev,cur) => prev.includes(cur) ? prev : [...prev,cur],[]);
}
var arr = ['qiang', 'ming', 'tao', 'li', 'liang', 'you', 'qiang', 'tao'];
console.time("nonredundant8");
var nonredundant8 = unique(arr);
console.timeEnd("nonredundant8");
console.log(nonredundant8);
결 과 는 다음 과 같다.
JavaScript常用的8个数组去重实战源码「实战干货」
자 바스 크 립 트 에서 자주 사용 하 는 배열 이 실전 소스 코드 를 다시 사용 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 js 배열 이 내용 을 다시 사용 하 는 것 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기