-
[js] 자바스크립트 json array 중복제거, 중복개수 카운팅하기JavaScript 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);
반응형'JavaScript' 카테고리의 다른 글
타입스크립트(TypeScript) 란? (4) 2024.11.24 [js] 자바스크립트 동적 엘리먼트 onclick 함수에 파라미터 넣기 (0) 2023.01.02 자바스크립트 class 클래스, extends 상속, super 슈퍼 사용하기 (0) 2022.12.10 Javascript 에서 점점점 (…) Three dots이란? (2) 2022.09.21 [javascript] 목록 엘리먼트에 오름차순/내림차순 정렬 기능 넣기(with sort 함수) (0) 2022.07.02