문제

나는 내 예술가 친구를위한 사이트를 만들었고, 그녀는 레이아웃이 동일하게 유지되기를 원하지만, 그녀는 현재 레이아웃에 혼합 된 새로운 그림을 원합니다. 그래서 메인 갤러리 페이지에 12 개의 썸네일 (Thumb1 -Thumb12)과 18 개의 이미지 (IMG1 -IMG18)가 있습니다.

내가 생각한 접근법은 모든 이미지의 배열을 만들고 무작위 화 한 다음 처음 12를 긁어 내고 엄지 슬롯에로드하는 것이 었습니다. 또 다른 접근법은 배열에서 12 개의 이미지를 무작위로 선택하는 것입니다. 첫 번째 경우, 배열의 요소를 무작위 화하는 방법을 찾을 수 없습니다. 후자의 경우, 나는 두 번째 배열을 사용하는 것 외에는 이미지가 두 번 이상로드되는 것을 막는 방법에 대해 뇌를 감싸지 못합니다.

그건 그렇고 나는이 모든 것을 JavaScript로하고 있습니다.

도움이 되었습니까?

해결책

나는 이것을 얼마 전에 썼다. 그리고 그것은 당신이 찾고있는 것에 맞는다. 나는 Ojblass가 언급하는 것은 Fisher-Yates Shuffle이라고 생각합니다.

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
};

배열을 수정하면 프로토 타입이 나쁜 형태로 간주 될 수 있습니다. 배열을 인수로 취하는 독립형 메소드로 구현할 수 있습니다. 어쨌든, 그것을 끝내려면 :

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

또는 원본을 실제로 수정하고 싶지 않은 경우 :

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

다른 팁

당신은 그것을 구현해야합니다 Fisher-Yates Shuffle (그렇지 않으면 Knuth Shuffle이라고도 함).

제공된 위대한 답변을보십시오 여기.

첫 번째 접근 방식이 효과가 있습니다. 18 개의 요소를 셔플하고 처음 12를 가져갑니다.

나는 최근 에이 문제를 직접 발견했다. 여기 게시물이 도움이되었습니다. http://waseemsakka.com/2012/02/14/javaScript-dropping-the-last-parts-of-an-array-of-an-an-array/ .

기본적으로 배열을 무작위로 시작하십시오.

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

이것은 18 가지 요소의 순서를 무작위로 만들 것입니다. 그런 다음 처음 12 개의 요소 만 유지하려면 마지막 6 개를 떨어 뜨립니다.

thumbs.length = 12;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top