[{id: 'xxx', name:'xxx'}, {id:'aaa', name:'aaa'}, {id:'xxx', name:'xxx'}] 형태의 객체가 있을 때 중복 제거하는 법
Set 객체 사용: Set 객체를 사용하여 중복을 제거할 수 있습니다. 이 방법은 객체의 특정 키를 기준으로 중복을 제거할 때 유용합니다. 아래 예제에서는 id를 기준으로 중복을 제거합니다.
const arr = [
{id: 'xxx', name: 'xxx'},
{id: 'aaa', name: 'aaa'},
{id: 'xxx', name: 'xxx'}
];
const uniqueArr = Array.from(new Set(arr.map(item => item.id)))
.map(id => {
return arr.find(item => item.id === id);
});
console.log(uniqueArr);
Array.prototype.filter 메서드 사용: filter 메서드를 사용하여 중복을 제거할 수 있습니다. 이 방법은 조건을 설정하여 중복 항목을 필터링할 수 있습니다.
const arr = [
{id: 'xxx', name: 'xxx'},
{id: 'aaa', name: 'aaa'},
{id: 'xxx', name: 'xxx'}
];
const uniqueArr = arr.filter((item, index, self) =>
index === self.findIndex(t => t.id === item.id)
);
console.log(uniqueArr);
reduce 사용 : reduce는 배열을 순회하면서 누적 값을 만들어나가는 메서드로, 이를 이용해 중복을 제거할 수 있습니다.
const arr = [
{id: 'xxx', name: 'xxx'},
{id: 'aaa', name: 'aaa'},
{id: 'xxx', name: 'xxx'}
];
const uniqueArr = arr.reduce((acc, current) => {
// 현재 객체의 id가 누적 배열에 존재하는지 확인
const x = acc.find(item => item.id === current.id);
// 존재하지 않으면 누적 배열에 추가
if (!x) {
acc.push(current);
}
return acc;
}, []);
console.log(uniqueArr);
- reduce 메서드를 사용하여 초기 값을 빈 배열 []로 설정합니다.
- 각 항목을 순회하면서 누적 배열 acc에 현재 항목이 존재하는지 find 메서드를 사용하여 확인합니다.
- 현재 항목의 id가 누적 배열에 존재하지 않으면 누적 배열에 추가합니다.
- 최종적으로 중복이 제거된 배열 uniqueArr를 반환합니다.
+ reduce 사용하면서 추가로 궁금했던거
1. {abc_code: 123}가 들어있는 parameter 객체를 reduce 함수로 보내고 그 안에 있는 데이터에서 abc_code랑만 비교해서 efg_code값만 뽑아낼 수 있는지?
const data = [
{abc_code: 123, efg_code: 'A'},
{abc_code: 456, efg_code: 'B'},
{abc_code: 123, efg_code: 'C'},
{abc_code: 789, efg_code: 'D'},
{abc_code: 123, efg_code: 'E'}
];
const param = {abc_code: 123};
const result = data.reduce((acc, current) => {
if (current.abc_code === param.abc_code) {
acc.push(current.efg_code);
}
return acc;
}, []);
console.log(result); // Output: ['A', 'C', 'E']
- reduce 메서드를 사용하여 초기 값을 빈 배열 []로 설정합니다.
- 각 항목을 순회하면서 current.abc_code가 param.abc_code와 일치하는지 확인합니다.
- 일치하는 경우, 해당 항목의 efg_code 값을 누적 배열 acc에 추가합니다.
- 최종적으로 조건을 만족하는 efg_code 값들의 배열 result를 반환합니다.
2. abc_code를 동적처리하는 방법은?
const data = [
{abc_code: 123, efg_code: 'A'},
{abc_code: 456, efg_code: 'B'},
{abc_code: 123, efg_code: 'C'},
{abc_code: 789, efg_code: 'D'},
{abc_code: 123, efg_code: 'E'}
];
const param = {abc_code: 123};
// param 객체의 첫 번째 키를 동적으로 추출
const paramKey = Object.keys(param)[0];
const paramValue = param[paramKey];
const result = data.reduce((acc, current) => {
if (current[paramKey] === paramValue) {
acc.push(current.efg_code);
}
return acc;
}, []);
console.log(result); // Output: ['A', 'C', 'E']
- param 객체의 첫 번째 키를 Object.keys(param)[0]를 사용하여 추출합니다.
- 추출한 키를 사용하여 param 객체에서 값을 가져옵니다.
- reduce 메서드를 사용하여 초기 값을 빈 배열 []로 설정합니다.
- 각 항목을 순회하면서 동적으로 추출한 키(paramKey)의 값이 paramValue와 일치하는지 확인합니다.
- 일치하는 경우, 해당 항목의 efg_code 값을 누적 배열 acc에 추가합니다.
- 최종적으로 조건을 만족하는 efg_code 값들의 배열 result를 반환합니다.
'JS' 카테고리의 다른 글
[Wijmo] Grid Format(f,g,n) 차이점 (0) | 2024.11.27 |
---|---|
[React] 최상위 컴포넌트에서 사용하는 함수에 return 사용이 안되는 이유 (0) | 2024.11.27 |
[React] <React.Fragment> 용도 (0) | 2024.11.26 |
[React] 기존 값은 유지하면서 특정 값만 바꾸려고 하는 경우(useState, produce) (0) | 2024.11.26 |
[JS] 객체에 있는 값을 배열로 만드는 방법 (0) | 2024.11.26 |