배열 재정렬은 배열에 있는 모든 요소의 순서를 방해하는 것을 의미합니다.
일반적인 방법은 배열의 기본 정렬 방법에 함수를 전달하는 것입니다. 이 함수는 배열 요소를 무작위로 배열하는 목적을 달성하기 위해 무작위로 1 또는 -1을 반환합니다.
이 방법은 직관적이지만 그다지 효율적이지 않습니다. 테스트를 해본 결과 10,000개 요소 배열을 스크램블하는 데 걸리는 시간은 약 35ms(firefox)입니다.
저는 항상 좋은 질문을 해왔기 때문에 효율적인 방법을 찾았습니다. 원문은 여기에서 확인하세요
이 방법은 Array.prototype에 shuffle이라는 함수를 추가합니다. 하지만 이름은 중요하지 않으며 효율성이 중요합니다.
위의 10,000개 요소 배열을 사용하여 테스트합니다. 이 방법을 사용하면 비순차적 작업을 완료하는 데 7~8밀리초밖에 걸리지 않습니다.
테스트하려면 배열 요소를 100000으로 늘립니다. 첫 번째 정렬 방법은 약 500ms가 걸리고, 셔플 방법은 약 40ms가 걸립니다.
전체 테스트 코드:
//다음 방법이 가장 효율적입니다
if (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parsInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
이것을 돌려주세요;
};
}
var t = new Date().getTime();
arr.shuffle();
document.write('
'아르'
');
var t1 = new Date().getTime();
document.write(t1-t);
또한 셔플 코드의 for 루프에 후반부가 없다는 사실을 알고 계셨나요? 즉, for(..)만 있고 뒤에는 {..}가 없습니다. 이렇게 쓸 수 있습니다! 그리고 실제로는 정상적으로 실행됩니다! 궁금해서 블로그 공원에 가서 물어봐야겠네요.