티스토리 뷰

프로젝트를 진행하는 와중에 팝업창에서 배열을 반환하고 부모창에서 그 배열을 가지고 값을 세팅하는 화면이 있었는데 기존 소스가 완성되어있는 상태에서 부모창에서 무조건 문자열만 반환이 가능한 상황이 생겼다.

기존 소스를 최대한 건드리지 않는 상태로 진행을 해야 서로가 좋은 상황이었기에 배열을 문자열로 변환하고 다시 그 문자열을 배열로 변환하는 함수를 만들어봤다.

그리 어려울건 없는 함수몇줄이지만 뭐랄까 처음으로 TDD에 입각한 방법으로 함수를 만들었고, 당장 프로젝트에서는 2차원배열이 끝이지만 기왕 만드는 김에 다차원 배열을 처리하기위해 개인적으로 어렵게 생각하는 재귀적 요소를 사용한게 내심 뿌듯해 블로그에 올리게됐다. 나중에 언제 다시 쓰게될지 모르니 사용방법을 미래의 나에게 전달하자면 첫번째 인자는 배열을, 두번째인자는 배열 요소들사이의 구분자를 '배열' 형태로 넣어야한다. 문자열로 변환할때와 다시 배열로 변환할때 동일한 구분자배열을 인자로 보내야하며 그럼 동일한 배열로 재변환이 가능하다


ex)

var arr = [1, 2, [11, 22, [111, 222], 33, 44], 3, 4, 5];

var delim = ["|", "^", "%"];


var strReturn = recursiveArraytoString(arr, delim);

=> "1|2|11^22^111%222^33^44|3|4|5"


recursiveStringtoArray(strReturn, delim);

-> [1, 2, [11, 22, [111, 222], 33, 44], 3, 4, 5]


배열을 문자열로 변환

function recursiveArraytoString(arrParam, arrDelim){ var index = 0; function innerFunction(arr, delim){ var strReturn = "";  

//배열의 요소를 순회하며 배열안에 또 배열이 있으면 재귀적 호출을 통해 끝까지 파고들어감. arr.forEach(function(e, i){ if(e instanceof Array){ index++; strReturn += innerFunction(e, delim); index--; }else{ strReturn += e; } if(i != (arr.length - 1)){ strReturn += delim[index]; } }); return strReturn; } return innerFunction(arrParam, arrDelim); }


문자열을 배열로 변환

function recursiveStringtoArray(strParam, arrDelim){ 
 var index = 0;
 function innerFunction(strParam, arrDelim){
  var arrReturn = [];
  var check = 0;
 

//[[0, 1, 2]] 와 같은 형식으로 배열이 단순히 배열만 품고있는 경우를 체크. for(var i = index; i < arrDelim.length; i++){ if(strParam.indexOf(arrDelim[i]) > -1){ check++; } } if(check == 0 ){ return strParam; } arrReturn = strParam.split(arrDelim[index]); arrReturn.forEach(function(e, i){ index++; arrReturn[i] = innerFunction(e, arrDelim); index--; }); return arrReturn; } var arrReturn = innerFunction(strParam, arrDelim); return arrReturn; }


공유하기 링크
TAG
댓글
댓글쓰기 폼