본문 바로가기

개발/lodash

lodash :: _.uniq(array) 구현하기

_.uniq(array) 함수는 Lodash에서 배열 내의 중복을 처리하는 array 함수이다.

해당 함수를 ES6 Javascript로 짐작하여 구현해봤다.

 


 

1. 첫 번째 방법 -> Object.keys()를 활용하여 key값들만 불러와 중복을 처리하는 방법.

 

import _ from "lodash";

const list = [9, 4, 3, 4, 5, 7, 7, 5, 9, 10];

const lodashUniq = _.uniq(list);    // [ 9, 4, 3, 5, 7, 10 ]
console.log(lodashUniq);


/*************
 * 첫 번째 방법. Object.keys() 방법
 * 자동 정렬이 된다. => [ 3, 4, 5, 7, 9, 10 ]
 **/

function myUniq (list) {
    const uniqArr = {};
    const result = [];
    for(let i = 0; i < list.length; i++) {
        if (uniqArr[list[i]] === undefined) {
            uniqArr[list[i]] = [list[i]];
        } else {
            uniqArr[list[i]].push(list[i]);
        }
    }

    for(let j = 0; j < Object.keys(uniqArr).length; j++) {
        result.push(parseInt(Object.keys(uniqArr)[j]));
    }

    return result;
}

const result = myUniq (list);
console.log(result);

 

 

2. 두 번째 방법 -> include()를 활용하여 새로운 배열에 하나씩 넣으면서 기존 요소가 있는지 없는지 확인하여 중복을 처리하는 방법.

 

/**********
 * 두 번째 방법. include() 방법
 * => [ 9, 4, 3, 5, 7, 10 ]
 */
function myUniq2 (list) {
    let uniqArr = [];
    for(let i = 0; i < list.length; i++) {
        if(!uniqArr.includes(list[i])) {
            uniqArr.push(list[i]);
        }
    }
    return uniqArr;
}

const result2 = myUniq2 (list);
console.log(result2);

 


 

3. _.uniqBy(array, [iteratee=_.identity]) 구현해보기

 

_.uniqBy([2.1, 1.2, 2.3], Math.floor);
// => [2.1, 1.2]
 
// The `_.property` iteratee shorthand.
_.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
// => [{ 'x': 1 }, { 'x': 2 }]

 

1차로 2번째 매개변수인 Math.floor로 list 원소들을 바꿔줄 것 같다. 그런데, 원본은 손상되지 않아야 한다.

어... 계속 이어집니다.

 

 

 

'개발 > lodash' 카테고리의 다른 글

lodash :: _.zip()과 _.unzip() 구현하기  (1) 2023.10.08