2009-05-02 6 views
8

나는 mine의 아티스트 친구를위한 사이트를 만들었으며 레이아웃이 동일하게 유지되기를 원하지만 그녀가 제작 한 새로운 그림이 현재 레이아웃에 혼합되기를 원합니다. 따라서 기본 갤러리 페이지에는 12 개의 축소판 이미지 (thumb1 - thumb12)와 함께 배치 할 18 개의 이미지 (img1 - img18)가 있습니다.배열의 요소를 무작위로 추출 하시겠습니까?

나는 모든 이미지의 배열을 생성 한 다음 무작위로 추출한 다음 처음 12을 긁어서 엄지 슬롯에로드하십시오. 또 다른 방법은 배열에서 임의로 12 개의 이미지를 선택하는 것입니다. 첫 번째 경우에는 배열의 요소를 무작위로 추출하는 방법을 찾을 수 없습니다. 후자의 경우 두 번째 배열을 사용하는 것 이외에 이미지가 두 번 이상로드되지 않도록하는 방법에 대해 두뇌를 감쌀 수 없으며 매우 비효율적이며 무서운 것처럼 보입니다.

나는이 모든 것을 Javascript에서하고 있습니다.

+0

중복 가능성을 [자바 스크립트 배열을 무작위 방법?] (http://stackoverflow.com/questions/2450954/how- to-randomize-a-javascript-array) – Bergi

답변

18

나는 이것을 얼마 전에 작성 했으므로 찾고있는 것을 적합하게 만든다. 수정 Array.prototype으로 나쁜 형태로 간주 될 수 있음을

Array.prototype.shuffle = function() { 
    var i = this.length; 
    while (--i) { 
     var j = Math.floor(Math.random() * (i + 1)) 
     var temp = this[i]; 
     this[i] = this[j]; 
     this[j] = temp; 
    } 

    return this; // for convenience, in case we want a reference to the array 
}; 

참고 : 나는 그것이 피셔 - 예이츠가 ojblass가 참조하는 셔플 믿습니다. 배열을 인수로 사용하는 독립 실행 형 메서드로이 메서드를 구현할 수 있습니다. 실제로 원본을 수정하지 않는 경우,

var randomSubset = originalArray.shuffle().slice(0,13); 

을 또는 : 어쨌든, 그것을 마무리하는 나는 최근 자신이 문제를 건너 왔어요

var randomSubset = originalArray.slice(0).shuffle().slice(0,13); 
+0

내부 루프는 언급 된 Fisher-Yates 셔플입니다. 바깥 쪽 루프가 여러 번 셔플을하고 있습니다. (아무 문제가 없다는 의미는 아닙니다.) –

+2

'iters'루프에 유의하십시오. Fisher-Yates 셔플은 모든 편곡이 똑같이 가능하다는 것을 의미하는 편파적이라고합니다. 배열을 여러 번 섞어서는 안됩니다. "더 좋은 믹스를 의미합니다." –

+0

난수의 분포가 고르지 않더라도? Bill이 지적한 것처럼 질문에 대한 대답을 모호하게하기 때문에 어쨌든 그 부분을 편집 할 수 있습니다. –

1

첫 번째 방법이 효과적입니다. 그냥 18 요소를 셔플하고 처음 12 가져 가라.

1

. 여기에 게시 된 게시물은 http://waseemsakka.com/2012/02/14/javascript-dropping-the-last-parts-of-an-array-and-randomizing-the-order-of-an-array/입니다.

기본적으로 배열을 무작위로 시작합니다

thumbs.sort(function(a, b) { 
    return Math.random() - 0.5; 
}) 

이것은 당신의 18 개 요소의 순서를 무작위로합니다. 그런 다음 첫 번째 12 개 요소를 유지하기 위해, 당신은 단지 6 마지막 한 방울 것 :의

thumbs.length = 12; 
+0

필자가 보았던 대부분의 정렬 함수는 비교 함수가 일관성이 있어야하며, 그렇지 않은 경우에는 결과가 정의되지 않는다.정렬 순서를 무한 루프로 던지는 무작위 결과가 상상할 수 있습니다. 올바른 순서로 생각한 항목을 다시 정렬하면 (실제로는 실제로는 발생하지 않지만). –

관련 문제