자바스크립트 배열 과 정렬 : JavaScript Array Sort , Queue
728x90
반응형
자바스크립트 배열 관하여...
배열에 관해 포스트를 하게된 이유는 개발 도중 배열이 정적이라는 것을 알게 되었기 때문이다. 이유는 잘 모르겠지만, 왜 배열로 선언된 변수를 새로운 변수에 담고 다르게 정렬하게 되면 두 변수가 동일한 결과를 가져오는 것이다. Why? 알려주세요 ㅡ.ㅜ;
과정은 이렇다.
배열A = 1 , 2 , 3
배열B = 배열A
배열A = 큐정렬(배열A) // 결과 2 , 3, 1
배열A // 2 , 3 , 1
배열B // 2 , 3 , 1
왜 이런 결과과 나오는 것인가? 분명 배열 큐정렬은 배열A에 대입했는 데. 배열B의 결과도 동일하게 변화가 생긴다.
내 생각은 메모리에 할당되어 같은 주소를 가져오기 때문이라 생각든다만,,,
해결법은 새로운 배열을 만들어주어야 한다. 그래서 배열 내장객체인 slice 사용하면된다. slice(시작[,끝])
배열에 관해 포스트를 하게된 이유는 개발 도중 배열이 정적이라는 것을 알게 되었기 때문이다. 이유는 잘 모르겠지만, 왜 배열로 선언된 변수를 새로운 변수에 담고 다르게 정렬하게 되면 두 변수가 동일한 결과를 가져오는 것이다. Why? 알려주세요 ㅡ.ㅜ;
과정은 이렇다.
배열A = 1 , 2 , 3
배열B = 배열A
배열A = 큐정렬(배열A) // 결과 2 , 3, 1
배열A // 2 , 3 , 1
배열B // 2 , 3 , 1
왜 이런 결과과 나오는 것인가? 분명 배열 큐정렬은 배열A에 대입했는 데. 배열B의 결과도 동일하게 변화가 생긴다.
내 생각은 메모리에 할당되어 같은 주소를 가져오기 때문이라 생각든다만,,,
해결법은 새로운 배열을 만들어주어야 한다. 그래서 배열 내장객체인 slice 사용하면된다. slice(시작[,끝])
예제
var objA = [ 1 , 2 , 3 ]; var objB = objA; document.writeln(objA.join(',')); // 1 , 2 , 3 document.writeln(objB.join(',')); // 1 , 2 , 3 objA = queue(objA); document.writeln(objA.join(',')); document.writeln(objB.join(','));
queue 함수에 slice 내장객체를 사용하면
objA 는 2 , 3 , 1 되고, objB 1 , 2 , 3 된다.
slice 내장객체 사용하지 않으면
objA 와 objB 는 2 , 3 , 1 이란 결과를 얻는 다.
큐 정렬 함수
/** * programmed by Seok Kyun. Choi. * http://syaku.tistory.com */ function queue(obj) { obj = obj.slice(0); // slice 객체를 써주는 것과 안써주는 것의 차이 이다. var cnt = obj.length; if (cnt <= 1) { return obj; } var last = obj[0]; var first = obj[1]; for (var i = 0; i < cnt; i++) { if (i == 0) { obj[0] = first; } else if (i == (cnt - 1)) { obj[cnt - 1] = last; } else { obj[i] = obj[i+1]; } } return obj; }
정렬 함수
/** * programmed by Seok Kyun. Choi. * http://syaku.tistory.com */ // 선택한 인덱스를 기준으로 큐정렬된다. function sort(obj,index) { index = parseInt(index); var obj = obj.slice(0); var cnt = obj.length; if (cnt <= 1) { return obj; } var first = obj[index]; var ret = []; ret[0] = first; var num = index; if (cnt <= 1) { return obj; } for (var i = 1; i < cnt; i++) { num++; if (num >= cnt) { num = 0; } ret[i] = obj[num]; } return ret; }
728x90
반응형
'개발노트 > JavaScript' 카테고리의 다른 글
네이버 차트 라이브러리 Nwagon : Naver Chart Library Nwagon (2) | 2014.03.14 |
---|---|
CKEditor 4 사용하기 (0) | 2013.06.19 |
XMLDOM 을 JSON 으로 파싱하여 활용하기, xml2json : 자바스크립트 (0) | 2009.07.16 |
XPath selectSingleNode : 자바스크립트 (0) | 2009.05.25 |