_.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 |
---|