자바스크립트 배열 과 정렬 : 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 |
