예정된 배열은 배열의 모든 요소의 순서를 방해하는 것을 의미합니다.
일반적인 방법은 배열의 기본 정렬 방법으로 함수를 전달하는 것입니다. 배열 요소를 무작위로 배열하는 목적을 달성하기 위해 무작위로 1 또는 -1을 반환합니다.
코드 사본은 다음과 같습니다.
arr.sort (function (a, b) {return math.random ()>. 5? -1 : 1;});
이 방법은 직관적이지만 효율적이지는 않습니다. 시험 후, 그것은 10,000 개의 요소 배열을 엉망으로 만들었고, 걸리는 시간은 약 35ms (Firefox)였습니다.
나는 항상 캐서롤을 깨는 것의 우수한 품질을 가지고 있었기 때문에 효율적인 방법을 찾았습니다. 이 원본 텍스트를 참조하십시오
코드 사본은 다음과 같습니다.
if (! array.prototype.shuffle) {
Array.prototype.shuffe = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], this [i] = this [j], this [j] = x);
이것을 반환하십시오;
};
}
arr.shuffle ();
이 메소드는 array.prototype에 함수를 추가합니다. 그러나 이름은 중요하지 않으며 효율성은 중요하지 않습니다.
위의 10,000 개의 요소 배열을 사용하여 테스트하십시오. 이 방법을 사용하여 주문에서 완료하는 데 7 ~ 8 밀리 초 밖에 걸리지 않습니다.
테스트를 위해 배열 요소를 10 배에서 100,000으로 늘리십시오. 첫 번째 정렬 방법은 약 500+ms를 사용하고 셔플 방법은 약 40ms가 걸립니다. 차이는 엄청납니다.
완전한 테스트 코드 :
코드 사본은 다음과 같습니다.
var count = 100000, arr = [];
for (var i = 0; i.5? -1 : 1;});
Array.prototype.sort.call (Arr, function (a, b) {return math.random ()>. 5? -1 : 1;});
document.write (arr+'
');
var t1 = new date (). gettime ();
document.write (t1-t);
// 다음 방법이 가장 효율적입니다
if (! array.prototype.shuffle) {
Array.prototype.shuffe = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], this [i] = this [j], this [j] = x);
이것을 반환하십시오;
};
}
var t = 새 날짜 (). gettime ();
arr.shuffle ();
document.write ( ''
'+arr+'
');
var t1 = new date (). gettime ();
document.write (t1-t);
또한 셔플 코드에서 for 루프를 발견 했습니까? 후반에는 없습니다! 즉, (..) 만 있지만 다음 {..}는 없으므로 이런 식으로 쓸 수 있습니다! 그리고 실제로 정상적으로 실행되었습니다! 너무 호기심이 많아서 블로그 파크에 가서 물어봐야합니다.