>  기사  >  웹 프론트엔드  >  JavaScript_javascript 기술로 가장 효율적인 배열 셔플링 방법 구현

JavaScript_javascript 기술로 가장 효율적인 배열 셔플링 방법 구현

WBOY
WBOY원래의
2016-05-16 16:34:102004검색

배열 재정렬은 배열에 있는 모든 요소의 순서를 방해하는 것을 의미합니다.

일반적인 방법은 배열의 기본 정렬 방법에 함수를 전달하는 것입니다. 이 함수는 배열 요소를 무작위로 배열하는 목적을 달성하기 위해 무작위로 1 또는 -1을 반환합니다.

코드 복사 코드는 다음과 같습니다.

arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;});

이 방법은 직관적이지만 그다지 효율적이지 않습니다. 테스트를 해본 결과 10,000개 요소 배열을 스크램블하는 데 걸리는 시간은 약 35ms(firefox)입니다.

저는 항상 좋은 질문을 해왔기 때문에 효율적인 방법을 찾았습니다. 원문은 여기에서 확인하세요

코드 복사 코드는 다음과 같습니다.

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);
         이것을 돌려주세요;
};
}
arr.shuffle();

이 방법은 Array.prototype에 shuffle이라는 함수를 추가합니다. 하지만 이름은 중요하지 않으며 효율성이 중요합니다.

위의 10,000개 요소 배열을 사용하여 테스트합니다. 이 방법을 사용하면 비순차적 작업을 완료하는 데 7~8밀리초밖에 걸리지 않습니다.

테스트하려면 배열 요소를 100000으로 늘립니다. 첫 번째 정렬 방법은 약 500ms가 걸리고, 셔플 방법은 약 40ms가 걸립니다.

전체 테스트 코드:

코드 복사 코드는 다음과 같습니다.

var 개수 = 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.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(..)만 있고 뒤에는 {..}가 없습니다. 이렇게 쓸 수 있습니다! 그리고 실제로는 정상적으로 실행됩니다! 궁금해서 블로그 공원에 가서 물어봐야겠네요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.