반응형
우선 나는 Tree구조로 되어있는 Menu를 만들때 Javascript의 Object는 순서가 보장되지 않는다는것을 알았다.
DB에서부터 정렬을 잘 해서 Javascript로 받고, Javascript에서 Tree구조를 만들때 발생한 상황이다.
예를들어
원하는 순서는 1,2,3,4,5 => 입력된 순서라고하면
Javascript Object를 사용해 For문을 돌리고 Tree구조를 만들때 2,1,3,4,5 이런식으로 순서가 섞이는 상황이 발생하였다.
이에 해결방안으로 Tree구조를 만들고, 내가 원하는 특정 키로 Sort하는 방식을 사용했다.
function convertMenuTree(arr) {
var tree = [],
mappedArr = {},
arrElem,
mappedElem;
for(var i = 0, len = arr.length; i < len; i++) {
arrElem = arr[i];
mappedArr[arrElem.menuId] = arrElem;
mappedArr[arrElem.menuId]['children'] = [];
}
for (var id in mappedArr) {
if (mappedArr.hasOwnProperty(id)) {
mappedElem = mappedArr[id];
if (mappedElem.parentId) {
mappedArr[mappedElem['parentId']]['children'].push(mappedElem);
}
else {
tree.push(mappedElem);
}
}
}
//Tree구조 완성
//menuSort와 menuOrderId 순서대로 Sorting
for(var i in tree){
tree[i].children.sort(function (a, b) {
return a.menuOrderId < b.menuOrderId ? -1 : a.menuOrderId > b.menuOrderId ? 1 : 0;
});
}
tree.sort(function (a, b) {
return a.menuSort < b.menuSort ? -1 : a.menuSort > b.menuSort ? 1 : 0;
});
return tree;
}
순서 :
우선 처음 Tree구조를 만들어내고 => 순서를 기준으로 할 인자값을 정해 순서대로 정렬하였다.
종종 발생할 수 있으니 알아두기로 하자...!
반응형
'Javascript(Jquery)' 카테고리의 다른 글
[Javascript] 파일업로드 이미지, 비디오 파일 Validation (0) | 2021.04.09 |
---|---|
[Javascript] 스크롤을 따라다니는 박스 만들기 (0) | 2021.04.05 |
YoutubeLink Validation Check 정규식 (0) | 2021.01.22 |
[Javascript] Prototype 이란? 개념 - 수정필요 (0) | 2021.01.05 |
[Javascript] JsonArray 만드는 방법 (0) | 2020.12.31 |