JavaScript
[js] 자바스크립트 json array 중복제거, 중복개수 카운팅하기
dev.mk
2023. 1. 14. 15:43
반응형
//1. overlapArr json array 중복제거
let overlapArr = [
{ id : 1, name : "이름A", age : 5 },
{ id : 1, name : "이름B", age : 10 },
{ id : 2, name : "이름C", age : 20 },
{ id : 3, name : "이름D", age : 40 },
{ id : 4, name : "이름E", age : 50 },
{ id : 5, name : "이름F", age : 10 },
{ id : 5, name : "이름G", age : 20 },
{ id : 5, name : "이름G", age : 30 }
];
var deduplicationArr = overlapArr.filter((item1, idx1)=>{
return overlapArr.findIndex((item2, idx2)=>{
return item1.id == item2.id;
}) == idx1;
});
console.log(deduplicationArr);
//2. overlapArr 중복개수 출력
let result = overlapArr.reduce(function(obj, cur) {
if (!obj[cur.id]) {
obj[cur.id] = 0;
}
obj[cur.id] += 1;
//중복건수가 1개이상일때 메세지 출력
if(obj[cur.id] == 2){
alert("중복값존재");
}
return obj;
}, {})
console.log(result);
//그 밖의 방법들............
//1. reduce + findIndex 를 이용해서 중복제거하기
const example1 = [
{ id: 123, name: "aaa" },
{ id: 123, name: "aaa" },
{ id: 123, name: "bbb" },
{ id: 5456, name: "zxc" }
];
let example1Result = example1.reduce(function(acc, current) {
if (acc.findIndex(({ id }) => id === current.id) === -1) {
acc.push(current);
}
return acc;
}, []);
//2. filter + findIndex를 이용
const example3 = [
{ id: 123, name: "aaa" },
{ id: 123, name: "aaa" },
{ id: 123, name: "bbb" },
{ id: 5456, name: "zxc" }
];
let example3Result = example3.filter((item, i) => {
return (
example3.findIndex((item2, j) => {
return item.id === item2.id;
}) === i
);
});
// 2-2. filter만 이용하기
// filter에는 3번째 인자로 callback 함수가 들어간다.
let example3_1 = example3.filter(
(arr, index, callback) => index === callback.findIndex(t => t.id === arr.id)
);
//3. Set을 이용하기.
//Set은 객체가 전부 같은 것만 중복제거를 한다. id == id && name == name
const example3 = [
{ id: 123, name: "aaa" },
{ id: 123, name: "aaa" },
{ id: 123, name: "bbb" },
{ id: 5456, name: "zxc" }
];
console.log([...new Set(example3.map(JSON.stringify))].map(JSON.parse));
//결과 [ { id: 123, name: "aaa" },{ id: 123, name: "bbb" },{ id: 5456, name: "zxc" }]
json array내 특정 key 및 조건으로 중복제거하기
let origin =[
{"masterCd":"K1", "bitCode":"TK", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
, {"masterCd":"C1", "bitCode":"KE", "showYn":"Y", "displayYn1":"Y", "displayYn2":"N"}
, {"masterCd":"D2", "bitCode":"KIX", "showYn":"Y", "displayYn1":"Y", "displayYn2":"N"}
, {"masterCd":"F3", "bitCode":"ICN", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
, {"masterCd":"I7", "bitCode":"PO", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
, {"masterCd":"K1", "bitCode":"TK", "showYn":"N", "displayYn1":"Y", "displayYn2":"N"}
]
let target = [
{"masterCd":"K1", "bitCode":"TK", "showYn":"Y", "displayYn1":"Y", "displayYn2":"Y"}
]
console.log("==== reduce 사용 ====");
let uniqueRows = origin.reduce((acc, current) => {
const isDuplicate = acc.find(item => item.masterCd === current.masterCd && item.bitCode === current.bitCode);
if (!isDuplicate) {
acc.push(current);
}
return acc;
}, []);
console.log("결과1");
console.log(uniqueRows);
console.log("==== object key 조합 중복체크 사용 ====");
// 중복을 체크할 객체 생성
let uniqueCheck = {};
// 중복을 제거한 새로운 배열 생성
let uniqueRows2 = origin.filter(item => {
const key = item.masterCd + '|' + item.bitCode;
if (!uniqueCheck[key]) {
uniqueCheck[key] = true;
return true;
}
return false;
});
console.log("결과2");
console.log(uniqueRows2);
console.log("==== new Set() 사용 ====");
// 중복을 체크할 Set 생성
let uniqueCheck2 = new Set();
// 중복을 제거한 새로운 배열 생성
let uniqueRows3 = origin.filter(item => {
const key = item.masterCd + '|' + item.bitCode;
if (!uniqueCheck2.has(key)) {
uniqueCheck2.add(key);
return true;
}
return false;
});
console.log("결과3");
console.log(uniqueRows3);
console.log("==== 원본 json에 target json을 비교하여 중복인것 표시하기 ====");
let result = origin;
result.forEach(row => {
let isDuplicate = target.some(
targetRow => targetRow.masterCd === row.masterCd && targetRow.bitCode === row.bitCode
);
row.flag = isDuplicate ? "DELETE" : "";
});
console.log("결과4");
console.log(result);반응형