두가지 프로퍼티를 재정리하기위해 데이터를 가져오면
훨씬 더 많은 중복되는 객체들이 나온다.
왜냐하면 프로퍼티의 개수만큼 객체가 곱해서 나오기 때문이다.
(디비에서 가져오는 배열 크기 = 묶고싶은 객체 한덩어리 x 프로퍼티1 개수 x 프로퍼티2 개수)
하지만 전 포스팅에서 소개했던 방식을
그대로 추가된 프로퍼티에 대해 한 번씩만 더 써주면 된다.
먼저 상황을 가정해보자
- 우리가 원하는 배열 : A
[
{
board_idx : 1,
comment : "안녕하세요",
tag : [
1,
2
],
img_url : [
"http://aaaa.aaaaa.aaaaaa",
"http://bbbb.bbbbb.bbbbbb",
]
},
{
board_idx : 2,
comment : "안녕히계세요",
tag : [
3,
4
],
img_url : [
"http://cccc.ccccc.cccccc",
"http://dddd.ddddd.dddddd"
]
}
]
- database에서 가져오게 되는 배열 : B
[
{
board_idx : 1,
comment : "안녕하세요",
tag : 1,
img_url : "http://aaaa.aaaaa.aaaaaa"
},
{
board_idx : 1,
comment : "안녕하세요",
tag : 2,
img_url : "http://aaaa.aaaaa.aaaaaa"
},
{
board_idx : 1,
comment : "안녕하세요",
tag : 1,
img_url : "http://bbbb.bbbbb.bbbbbb"
},
{
board_idx : 1,
comment : "안녕하세요",
tag : 2,
img_url : "http://bbbb.bbbbb.bbbbbb"
},
{
board_idx : 2,
comment : "안녕히계세요",
tag : 1,
img_url : "http://cccc.ccccc.cccccc"
},
{
board_idx : 2,
comment : "안녕히계세요",
tag : 2,
img_url : "http://cccc.ccccc.cccccc"
},
{
board_idx : 2,
comment : "안녕히계세요",
tag : 1,
img_url : "http://dddd.ddddd.dddddd"
},
{
board_idx : 2,
comment : "안녕히계세요",
tag : 2,
img_url : "http://dddd.ddddd.dddddd"
}
]
재배열 함수 : (중복을 제거하는 함수 removeSameTag, removeSameImgUri는 맨 아래를 참고하면 되겠다.)
rearrangeBoardByTagAndImg: (boardArr) => {
var targetAllResult = [];
var preTagArr = [];
var preImgArr = [];
var preTargetIdx = 0;
for (var idx in boardArr) {
//이전거랑 reviewIdx가 다르면 이전 img_uri 배열 확정 저장 및 예비 이미지 배열(preImgArr)초기화
//첫번째와 마지막이 아닌경우
if (idx != 0 && idx != boardArr.length - 1) {
if (preTargetIdx != boardArr[idx].board_idx) { //이전 reviewIdx와 다를때
// console.log(1);
//중복제거
boardArr[idx - 1].tag_idx = tools.removeSameTag(preTagArr);
boardArr[idx - 1].board_img_uri = tools.removeSameImgUri(preImgArr);
targetAllResult.push(boardArr[idx - 1]);
preTagArr = [];
preImgArr = [];
preTagArr.push(boardArr[idx].tag_idx);
preImgArr.push(boardArr[idx].board_img_uri);
} else {
// console.log(2);
//이전거랑 reviewidx가 같으면 preImgArr(img_uri배열)에 자신의 img_uri 추가
preTagArr.push(boardArr[idx].tag_idx);
preImgArr.push(boardArr[idx].board_img_uri);
}
}
if (idx == 0) {
console.log(3);
preTagArr.push(boardArr[idx].tag_idx);
preImgArr.push(boardArr[idx].board_img_uri);
}
//마지막
if (idx == boardArr.length - 1) {
if (preTargetIdx != boardArr[idx].board_idx) {
// console.log(4);
//reviewIdx가 이전거랑 다를때
//전 review를 resultArr에 푸쉬
console.log(idx);
//인자 카페 개수가 1개 이상일 때 적용, 1개면 이 if문 적용 x
if(idx != 0) {
boardArr[idx - 1].tag_idx = tools.removeSameTag(preTagArr);
boardArr[idx - 1].board_img_uri = tools.removeSameImgUri(preImgArr);
console.log("hi");
console.log( boardArr[idx - 1].tag_idx);
targetAllResult.push(boardArr[idx - 1]);
//preImgArr초기화
preTagArr = [];
preImgArr = [];
preTagArr.push(boardArr[idx].tag_idx);
preImgArr.push(boardArr[idx].board_img_uri);
}
boardArr[idx].tag_idx = preTagArr;
boardArr[idx].board_img_uri = preImgArr;
//이 review 바로 result에 푸쉬
targetAllResult.push(boardArr[idx]);
} else {
// console.log();
//reviewIdx가 이전거랑 같을때
preTagArr.push(boardArr[idx].tag_idx);
preImgArr.push(boardArr[idx].board_img_uri);
boardArr[idx].tag_idx = tools.removeSameTag(preTagArr);
boardArr[idx].board_img_uri = tools.removeSameImgUri(preImgArr);
console.log("hi");
console.log( boardArr[idx - 1].tag_idx);
targetAllResult.push(boardArr[idx]);
}
}
preTargetIdx = boardArr[idx].board_idx;
}
return targetAllResult;
}
위의 함수를 보면 저느이 포스팅에서 보여줬던 방식 그대로 이용하여
추가된 프로퍼티에 대해서도 똑같이 적용해
각 for문제 한 줄씩 추가되어있는 것을 볼 수 있다.
이것이 가능한 이유는
해당 프로퍼티도 개수만큼 따로 나오긴 하지만
순서만큼은 묶여서 나오기 때문이다.
이 함수에 대해 더 구체적인 이해가 필요하시다면 댓글을 달아주시면 되겠습니다.
- 위에서 중복을 제거하는데 사용된 함수 :
removeSameTag: (arr) => {
if(arr.length>0){
const result = [];
var s = 0;
var i = 0; //반복횟수
for (var e of arr) {
result.forEach(it => {
if (it == e) {
s = 1;
}
})
if (s != 1) {
result.push(e);
}
s = 0;
i++;
}
return result;
}
},
removeSameImgUri: (arr) => {
if(arr.length>0){
const result = [];
var s = 0;
var i = 0; //반복횟수
for (var e of arr) {
result.forEach(it => {
if (it == e) {
s = 1;
}
})
if (s != 1) {
result.push(e);
}
s = 0;
i++;
}
return result;
}
}
반응형
'인포테인먼트 - development > 알고리즘' 카테고리의 다른 글
[알고리즘] DATABASE에서 여러 테이블을 JOIN해서 가져온 데이터배열 중복 제거, 정리(1) (0) | 2020.03.21 |
---|
댓글