IT•개발 끄적/JavaScript
[JavaScript] 배열 key 중복 제거 (ft.동일 키 배열 합치기)
소다맛사탕
2021. 12. 16. 22:38
반응형
안녕하세요. 소다맛사탕 입니다.
코딩 알고리즘을 짜거나 프로젝트를 진행 하다보면 참 많이 '반복문', '배열'을 쓰곤 합니다.
특히 자바스크립트에서 반복되는 객체를 찾아서 합치거나 중복을 제거하는 경우가 많습니다.
제가 최근에 썼거나 작성해보니까 괜찮다하는 코드중 중복 객체를 배열에 담아 합치는 것을 구현해 보았습니다.
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<head></head> 사이에 항상 최신의 jQuery를 사용할 수 있게 선언하고,
HTML에 반복되는 문서 객체나 특정 Index가 반복되는게 있다 치면...
1. 중복제거
$(document).ready(function(){
fncDelDuplication();
});
function fncDelDuplication(){
var arr = [{"index" : 1, "text" : 1}, {"index" : 1, "text" : 2}, {"index" : 1, "text" : 3},
{"index" : 2, "text" : 1}, {"index" : 2, "text" : 3}, {"index" : 2, "text" : 5},
{"index" : 3, "text": 10}];
var resultArr = [];
var flag = true;
for(var i = 0; i < arr.length; i++){
flag = true;
// 향상된 for문 사용 가능
for(value in resultArr){
if(resultArr[value].index === arr[i].index){
flag = false;
}
}
// 일반적인 for문 사용
// for(var j = 0; j< resultArr.length; j++){
// if(resultArr[j].index === arr[i].index){
// flag = false;
// }
// }
if(flag){
resultArr.push(arr[i]);
}
}
console.log("중복 제거 : "+JSON.stringify(resultArr));
}
---- 결과 ----
중복 제거 : [{"index":1,"text":1},{"index":2,"text":1},{"index":3,"text":10}]
※ === 표시는 같은 값과 타입을 동시에 비교합니다.
2. 같은 key 끼리 합치기
$(document).ready(function(){
fncArrMerge();
fncArrMerge2();
});
// key, value 배열
const arr = [{"index" : 1, "text" : 1}, {"index" : 1, "text" : 2}, {"index" : 1, "text" : 3},
{"index" : 2, "text" : 1}, {"index" : 2, "text" : 3}, {"index" : 2, "text" : 5},
{"index" : 3, "text": 10}];
function fncArrMerge(){
var resultArr = [];
for(var i = 0; i < arr.length; i++){
var idx = getKeyIndex(resultArr, arr[i]);
if(idx > -1){
resultArr[idx].text += Number(arr[i].text);
}else{
resultArr.push(arr[i]);
}
}
console.log("배열의 합 : "+JSON.stringify(resultArr));
}
function getKeyIndex(arr, obj){
// 중복 체크
for(var i = 0; i < arr.length; i++){
if(arr[i].index === obj.index){
return i;
}
}
return -1;
}
//////////////////////// 방법 2 //////////////////////////
function fncArrMerge2(){
var resultArr = [];
var flag = false;
var cnt = 0;
for(var i = 0; i < arr.length; i++){
cnt = 0;
flag = false;
for(value in resultArr){
// 중복 체크
if(resultArr[value].index === arr[i].index){
flag = true;
}
if(flag){
++cnt;
resultArr[value].index = Number(arr[i].index);
resultArr[value].text += Number(arr[i].text);
}
}
if(cnt == 0){
resultArr.push(arr[i]);
}
}
console.log("배열의 합2 : "+JSON.stringify(resultArr));
}
---- 결과 ----
배열의 합 : [{"index":1,"text":6},{"index":2,"text":9},{"index":3,"text":10}]
배열의 합2 : [{"index":1,"text":6},{"index":2,"text":9},{"index":3,"text":10}]
자바스크립트에서 배열의 중복을 제거하거나 같은 key 끼리 묶는 코드는
인터넷상에 찾아보면 많기 때문에 저도 참고해서 이렇게 해보았다 입니다.
본인만의 코드를 만들어서 한번 짜보시는게 좋을꺼 같습니다.